8fold / php-html-builder
用于构建 HTML 文档和元素字符串的库。
2.4.0
2023-04-30 18:51 UTC
Requires
- php: ^8.1
- 8fold/php-xml-builder: ^2.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.7
README
HTML Builder 扩展并实现了 8fold XML Builder,类似于 HTML 扩展并作为 XML 的具体实现。这类似于 HTML 如何扩展并成为 XML 的具体实现。
安装
composer require 8fold/php-html-builder
使用(基本)
警告:此库的用户负责对内容进行清理。
默认情况下,HTML Builder 可以快速输出具有元素属性一致排序的 HTML 字符串。默认顺序可以在 Element
类中找到,如果您希望有不同的排序,则可以覆盖它。这有助于创建和保持一致的 HTML 模式。此外,无需更新模板或其他代码即可更改此模式。
use Eightfold\HTMLBuilder\Document; use Eightfold\HTMLBuilder\Element; Document::create('title') ->head( Element::link() ->omitEndTag()->props('rel stylesheet', 'href style.css'), Element::script()->props('src script.js') )->body( Element::p('paragraph content') )
输出
<!doctype html> <html lang="en"><head><title>title</title><meta charset="utf-8"><link rel="stylesheet" href="style.css"><script src="script.js"></script></head><body><p>paragraph content</p></body></html>
格式化输出
<!doctype html> <html lang="en"> <head> <title>title</title> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> <script src="script.js"></script> </head> <body> <p>paragraph content</p> </body> </html>
更多示例可以在 tests
文件夹中找到,包括示例扩展。
关于属性的一则说明:如果属性不在有序列表中,并且属性的值与属性名称相同,HTML Builder 将假设它是一个布尔值,并在 HTML 输出中截断定义。
Element::input()->omitEndTag()->props("required required");
输出
<input required>
性能
可以使用 /comparisons
文件夹在本地运行性能测试,比较使用以下方法生成的相同输出:
- 直接 HTML,
- 标准 PHP,
- PHP HTML Builder 与标准 PHP(Element 类),
- 仅 PHP HTML Builder(Document 类),以及
- 仅使用 PSR-4 自动加载的 PHP HTML Builder。
这些结果来自 2024 年 2 月 26 日
值得注意的事项(作为粗略的解释)
- 将 PHP 用作模板引擎对速度的影响可以忽略不计。
- 不使用 PSR-4 自动加载的情况下使用
require_once
会将速度降低约 1.5 毫秒;然而,一旦代码可用,似乎就不会有额外的成本。 - 使用 PSR-4 会将速度降低约 6 毫秒;然而,确保一切都在且可用。
- 使用 PHP HTML Builder Document 和 Element 类可导致数据包大小减少 1 千字节。(很可能是由于处理时间增加而抵消了下载时间减少。)
详细信息
有关详细信息,请参阅 8fold XML Builder。