實現一個簡單的Laravel的dd庫

分類:IT技術 時間:2017-09-12

前幾天寫了一個簡單的Laravel的dd庫。
為什麽自己要寫一個這樣的庫?
Laravel本身已經實現了自己的輸出dd函數,但是我之所以要寫這樣一個庫,一來是因為Laravel本身對這個庫的封裝沒辦法很好的解剖出來,另一方面,他的實現過於復雜。

安裝方式

  1. composer 安裝

    composer require nine/dd 
  2. 直接下載
    clone 下來即可

使用

  1. 如我在exapmle.php中所寫,我們既可以直接使用:
\dd\Dump::dump('hello,nine');

同時也可以自己封裝一個dd函數:

function dd($value)
{
    \dd\Dump::dump($value);
}
dd("hello,nine");

不管是哪種方式,他都會自動的識別我們的類型來予以不同的展示效果。

此外,如果需要自己單獨配置樣式和新增裝飾符號,可以在conf目錄下根據所給的註釋予以添加。

效果

  • string

d84bc944-3427-4ad8-bee4-822f6ce1775a.png

  • array

d5f42a26-f46b-4a5f-9894-a558e8be994b.png

  • function

9f0c4815-d1a6-4d3f-999a-0ceeb6ab49ac.png

  • object

2f1a3c3a-c621-46ee-97d2-ff610d245a9e.png

+代表public-代表private#代表protected,屬性後面灰色的部分代表默認值。

結構

.
├── Dump.php
├── conf
│   ├── css.php
│   └── decorator.php
├── decorator
│   ├── DecoratorComponent.php
│   ├── Div.php
│   ├── P.php
│   └── Span.php
└── render
    ├── AbstractDump.php
    ├── DumpArray.php
    ├── DumpObject.php
    └── DumpString.php

以上是他的主要目錄結構。

  1. 其中Dump.php主要是我們用來中轉類型的地方,他會根據我們提供數據的不同類型,來解析並用反射類來幫我們實現中轉。
    conf層主要是一些配置文件,css.php是一個樣式配置文件,decorator.php是一個我們需要定制的裝飾器,比如=>符號之類的。
  2. decorator是裝飾器層,DecoratorComonent.php是一個裝飾器基類,他的主要工作是用來初始化我們的樣式表,同時提供了一些可以讓我們自定義的方法,比如添加span裝飾器,或者給這個裝飾器添加一些樣式等等。Span.php等文件主要是我們的具體裝飾器,其中主要有兩個方法,wrap方法來完善最終的輸出效果,而display方法則是用來輸出。
  3. render是渲染層,這裏就像是一個效果加工廠,比如前面提到的decorator提供了一些添加樣式的工具,那麽這裏就是用來調用這些工具的地方。AbstractRender.php是一個基類,裏面提供了一些初始化我們前面提到的自定義裝飾器符號的工具,還有包裹解析我們的數組形成數組的裝飾效果(因為像對象還有函數都會用到它),還有像parseParams會根據我們傳入的函數(方法)的參數所形成的反射數組,來進行解析,判斷他的默認值等,最終形成一個包裹好的裝飾器;display方法主要就是獲取我們的span之類的裝飾器,然後最終調用裝飾器的display方法來予以輸出。
    而裏面的諸如DumpString.php主要是有提供一個render方法來給外面的Dump.php使用,這幾個就是會根據具體的類型來進行解析了。

大概思路

我們最終要實現的一個頁面效果是像Dom節點一樣,一層一層的包裹著我們最終的元素。所以我能第一時間聯系到的就是裝飾器。裝飾器去生產各種Dom節點,為了防止生產對象的濫用,我這裏也在AbstractDump.php文件中加入了單例的判斷。當然,裏面可能有許多設計的不夠合理的地方,還望指正。


個人博客地址:http://www.hellonine.top


Tags: php 我們 一個 Laravel 實現 代表

文章來源:


ads
ads

相關文章
ads

相關文章

ad