目的
用PHP生成HTML文件, 支援標籤巢狀縮排, 支援標籤自定義屬性
起因
這個東西確實也是心血來潮寫的, 本來打算是輸出HTML片段用的, 但後來就乾脆寫成了一個可以輸出完整HTML的功能;
我很滿意裡邊的實現縮排的機制, 大家有用到的可以看看
p.s. 現在都是真正的前後端分離了(vue, nodejs, webpack…), 這個東西喜歡就用, 不喜歡就算了~
支援的標籤
html, head, meta, title, body, input, select/option, form, table, div, 註釋, 以及 自定義標籤(成對出現的標籤), 還有一大堆屬性(在下邊有介紹)
實現
整體
- 每個標籤都對應一個類, 比如 標籤<html>, 對應了一個叫html的類
- 標籤中有用到的屬性, 我都放到了一個類中了, 並提供了方法去獲取賦了值的屬性
巢狀縮排
每個標籤我都設計了一個類, 比如 table 標籤, 就有一個叫table的類與之對應
每個類裡邊一般都有以下3個重要成員:
- 本標籤的縮排值
- 輸出本標籤最終字串的方法, out()
- 給本標籤新增子標籤的方發, append()
其中append()接收的是子標籤的物件, 在最終呼叫$html->out()的時候, 每個子標籤物件裡的out()方法會被依次呼叫, 縮排值也會從上層類傳遞到最下層類並累加;
另外, 每個類都包含了屬性類(calss attribute ), 每個類的縮排值是從屬性類裡繼承而來的, 所以如果修改了屬性類裡的縮排量, 所有類的縮排量就跟著改變了
你也可以給標籤類新增一個自己的縮排值來覆蓋統一的縮排值
屬性
我這裡的方案是定義一個類(calss attribute ), 裡邊有
- 標籤可能擁有的屬性
- 對應的setXxx方法
- 組裝非空的屬性拼成字串的方法
- 為了不影響下次顯示, 會有專門的清空方法, 把之前賦值的屬性都清空
這樣的話, 在定義標籤屬性的時候, 需要的就賦上值, 不需要的不賦值就不會在最終的HTML程式碼中顯示出來
原始碼
地址: 碼雲 看其中的test.php檔案,是介紹他的用法