前幾天寫了一個簡單的Laravel
的dd庫。
為什麼自己要寫一個這樣的庫?Laravel
本身已經實現了自己的輸出dd
函式,但是我之所以要寫這樣一個庫,一來是因為Laravel
本身對這個庫的封裝沒辦法很好的解剖出來,另一方面,他的實現過於複雜。
如果覺得好用可以star
一下嘛~
安裝方式
-
composer 安裝
composer require nine/dd
-
直接下載
clone 下來即可
使用
- 如我在exapmle.php中所寫,我們既可以直接使用:
\dd\Dump::dump('hello,nine');
同時也可以自己封裝一個dd
函式:
function dd($value)
{
\dd\Dump::dump($value);
}
dd("hello,nine");
不管是哪種方式,他都會自動的識別我們的型別來予以不同的展示效果。
此外,如果需要自己單獨配置樣式和新增裝飾符號,可以在conf目錄下根據所給的註釋予以新增。
效果
- string
- array
- function
- object
+
代表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
以上是他的主要目錄結構。
- 其中
Dump.php
主要是我們用來中轉型別的地方,他會根據我們提供資料的不同型別,來解析並用反射類來幫我們實現中轉。conf
層主要是一些配置檔案,css.php
是一個樣式配置檔案,decorator.php
是一個我們需要定製的裝飾器,比如=>
符號之類的。 decorator
是裝飾器層,DecoratorComonent.php
是一個裝飾器基類,他的主要工作是用來初始化我們的樣式表,同時提供了一些可以讓我們自定義的方法,比如新增span
裝飾器,或者給這個裝飾器新增一些樣式等等。Span.php
等檔案主要是我們的具體裝飾器,其中主要有兩個方法,wrap
方法來完善最終的輸出效果,而display
方法則是用來輸出。render
是渲染層,這裡就像是一個效果加工廠,比如前面提到的decorator
提供了一些新增樣式的工具,那麼這裡就是用來呼叫這些工具的地方。AbstractRender.php
是一個基類,裡面提供了一些初始化我們前面提到的自定義裝飾器符號的工具,還有包裹解析我們的陣列形成陣列的裝飾效果(因為像物件還有函式都會用到它),還有像parseParams
會根據我們傳入的函式(方法)的引數所形成的反射陣列,來進行解析,判斷他的預設值等,最終形成一個包裹好的裝飾器;display
方法主要就是獲取我們的span
之類的裝飾器,然後最終呼叫裝飾器的display
方法來予以輸出。
而裡面的諸如DumpString.php
主要是有提供一個render
方法來給外面的Dump.php
使用,這幾個就是會根據具體的型別來進行解析了。
大概思路
我們最終要實現的一個頁面效果是像Dom
節點一樣,一層一層的包裹著我們最終的元素。所以我能第一時間聯絡到的就是裝飾器
。裝飾器去生產各種Dom
節點,為了防止生產物件的濫用,我這裡也在AbstractDump.php
檔案中加入了單例的判斷。當然,裡面可能有許多設計的不夠合理的地方,還望指正。
個人部落格地址:http://www.hellonine.top
。
本作品採用《CC 協議》,轉載必須註明作者和本文連結