我真的看不出它们之间的区别。模板的效果如何?我不仅不明白它,也不明白我如何说服别人使用它。我理解担忧的"分离",但我没有遇到过大问题。第一个生成多个<li>
标签的例子不是和echo
一样吗?而且,我会使用php作为"模板语言",所以我不关心Smarty或其他系统。谢谢
为什么我应该在PHP中使用模板系统?
<h1><?=$title?></h1>
<ul>
<?php foreach ($items as $item) {?>
<li><?=$item?></li>
<?php } ?>
</ul>
和(我在论坛上找到的一些片段作为例子):
echo "<table>";
for ($i = 0; $i < $largestArray; $i++)
{
echo "<tr>";
if ($i < $array1Size)
{
echo "<td>";
echo $array1[$i];
echo "</td>";
}
else
{
echo "<td>";
echo "null";
echo "</td>";
}
if ($i < $array2Size)
{
echo "<td>";
echo $array2[$i];
echo "</td>";
}
else
{
echo "<td>";
echo "null";
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
或者类似的东西:
<table id="working" border="0" cellspacing="1" cellpadding="3">
<tr>
<?php foreach ($csv->titles as $value): ?>
<td><?php echo $value; ?></td>
<?php endforeach; ?>
</tr>
<?php foreach ($csv->data as $key => $row): ?>
<tr>
<?php foreach ($row as $value): ?>
<td><?php echo $value; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
编辑:这应该是一个社区维基问题吗?
您的标识似乎有点混乱,但最重要的是第二个版本的可读性要高得多(例如,您可以轻松读取标记层次结构)。可读代码是指可以很容易地维护或重构的代码。
只使用PHP的echo关键字编写下面的代码不太可读。你也会担心引号和双引号。使用类似模板的方法,您最终得到的代码看起来类似于HTML文档。
<table id="working" border="0" cellspacing="1" cellpadding="3">
<tr>
<?php foreach ($csv->titles as $value): ?>
<td><?php echo $value; ?></td>
<?php endforeach; ?>
</tr>
<?php foreach ($csv->data as $key => $row): ?>
<tr>
<?php foreach ($row as $value): ?>
<td><?php echo $value; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
cakepp和codeignator等模板化系统使用MVC,使代码更干净、更符合标准。您也可以编写自己的MVC。
模板系统是而不是表示逻辑分离的最终解决方案。它们是一个解决方案,也是许多PHP框架使用的解决方案。在一般的"MVC"/MVA/MMVM/MVVM PHP开发中,您不希望在表示层中有任何业务逻辑。回显HTML(通常)直接违反了这种做法;对于模板,业务逻辑不存在于表示层中,反之亦然。
跳回到第一点,模板是解决方案,而不是方案。表示层有很多可用的选项,这在很大程度上取决于您的编码风格和/或框架/库的使用情况。
在个人层面上,我更喜欢模板(对于大多数小型医学项目),原因除了上面概述的之外:
-
使"主题化"和交换网站样式变得更加容易。只需修改模板或实现一个主题切换器,即可加载不同的模板
-
从实体模型到模板是一件轻而易举的事,因为模板(通常)只是HTML,其中有一些php片段会回显数据。
-
模板是"愚蠢的"。它们不需要知道业务逻辑中发生的任何事情,它们所关心的只是将一些数据回显到HTML中。
-
可读性。这几乎完全是个人偏好,尤其是考虑到模板语法的广泛性。
tl;dr-模板化与[在此插入其他解决方案]几乎完全是主观的,除非你有基于托管、客户要求、流量水平等的限制。如果是这样,那么就找到关于效率和可扩展性的基准和更多信息,并根据项目的要求做出明智的决定。