library.php
我自己的HTML标记编码器,它将根据输入打印HTML代码。
<?php
function tag($tagname, $content = NULL, array $properties = NULL)
{
$html = "<$tagname";
if (!($properties === NULL))
foreach ($properties as $name => $value) {
$html .= " $name=\"$value\"";
}
$html .= ($content === NULL || $content == "") ? " />" : ">$content</$tagname>";
return $html;
}
?>
的index.php
测试index.php文件,它将从库中运行HTML编码器。
<?php
require 'library.php';
echo tag("head",
tag("meta","",array("name"=>"title","content"=>"Test Print"))
);
echo tag("body",
tag("div",tag("p","test print".tag("br")."test print"),array())
);
?>
输出:
<head><meta name="title" content="Test Print" /></head><body><div><p>test print<br />test print</p></div></body>
问题:
使用此库可以在添加更多PHP代码时使我的代码更具可读性。我可以使用此<div><?php $variable ?></div>
代替此echo tag("div",$variable);
,但与仅键入HTML代码相比,后者肯定会更长。
我不应该创建这样的功能并继续使用HTML编码吗?
答案 0 :(得分:1)
你是在正确的轨道上,但回声不是IMO工作的正确工具。
考虑XML通常我们可以代表这样的数据:
array('tag', $attributes, $children);
子元素的嵌套允许我们这样做(子元素是嵌套元素的数组,或者是简单文本子元素的字符串)。
array('div',
array('class' => 'container'),
array(array('span', array(), 'One'),
array('span', array(), 'Two')));
代表:
<div class="container">
<span>One</span>
<span>Two</span>
</div>
使用XMLWriter我们可以毫不费力地编写这个结构。看看this图书馆。无论模板应出现在哪种上下文中,XMLWriter的输出始终都是正确缩进的。
这是将数据结构与您正在解决的问题进行匹配的典型示例。通过创建一个表示X(HT)ML的树,我们可以构建它们属于我们代码的结构组件,而不是被迫以正确的顺序获取所有的echo语句。