首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我要在PHP中使用模板系统?

为什么我要在PHP中使用模板系统?
EN

Stack Overflow用户
提问于 2009-01-12 16:37:13
回答 25查看 13.4K关注 0票数 61

为什么我要在PHP中使用模板系统?

我的问题背后的推理是: PHP本身就是一个功能丰富的模板系统,为什么我要安装另一个模板引擎?

到目前为止,我发现的唯一两个优点是:

语法更清晰的(sometimes)

  • Template引擎通常不足以实现业务逻辑,因此它迫使您分离关注点(
  1. )。使用PHP进行模板可以诱使您绕过模板原则并重新开始编写代码汤。

..。与缺点相比,两者都是微不足道的。

小示例:

PHP

代码语言:javascript
复制
<h1><?=$title?></h1>
<ul>
  <? foreach ($items as $item) {?>
  <li><?=$item?></li>
  <? } ?>
</ul>

智能

代码语言:javascript
复制
<h1>{$title}</h1>
<ul>
  {foreach item=item from=$items}
  <li>{$item}</li>
  {/foreach}
</ul>

我真的看不出有什么不同。

EN

回答 25

Stack Overflow用户

回答已采纳

发布于 2009-01-12 16:46:52

是的,正如您所说,如果您不强制自己在PHP (模板引擎)中使用模板引擎,就很容易滑倒并停止分离关注点。

然而,同样是那些在分离关注点时遇到问题的人最终会生成并将其提供给smarty,或者在Smarty中执行代码,所以Smarty很难解决你的关注点分离问题。

另请参阅:

票数 26
EN

Stack Overflow用户

发布于 2009-01-12 16:54:26

人们使用模板系统的主要原因是将逻辑从表示中分离出来。这样做有几个好处。

首先,你可以把一个模板交给一个网页设计师,他可以在他们认为合适的时候移动东西,而不必担心代码的流动。他们不需要理解PHP,只要知道不要去管特殊的标签就行了。他们可能必须为几个标签学习一些简单的语义,但这比学习整个语言要简单得多。

此外,通过将页面拆分成单独的文件,程序员和设计师都可以同时在同一“页面”上工作,根据需要签入源代码管理,而不会发生冲突。设计人员可以针对代码的稳定版本测试他们的模板视觉效果,而程序员正在针对自己的副本进行其他潜在的破坏性更改。但是,如果这两个人都在编辑同一个文件,并且必须合并到不同的更改中,您可能会遇到问题。

它还强制执行良好的编程实践,使业务逻辑远离表示逻辑。如果您将业务逻辑与表示混合在一起,那么如果以后需要以不同的方式表示它,那么提取它就会更加困难。如今,web应用程序中的不同呈现模式越来越流行: RSS/ATOM提要,JSON或AJAX响应,手持设备的WML等。使用模板系统,这些通常可以完全通过模板完成,而不需要或很少更改其他任何内容。

然而,并不是每个人都需要或欣赏这些好处。与Java/Python/Ruby/etc相比,PHP的优势在于你可以快速地在网页中加入一些逻辑,这一切都很好。

票数 18
EN

Stack Overflow用户

发布于 2009-01-13 13:32:01

以分离逻辑为借口使用非PHP模板是无稽之谈。如果开发人员不了解业务-视图逻辑分离是什么以及应该如何实现,则必须适当地解决问题。否则,最终的结果是业务逻辑中的HTML或模板中的业务逻辑--没有模板引擎可以拯救您。你必须教给开发人员一些基础知识。

如果开发人员确实了解这一点,那么模板系统只是一个限制。它不会给开发过程增加任何价值,只会增加学习新语法的开销,使另一个库保持最新,并降低执行速度。虽然后者可以通过缓存等解决,但这只是解决了一个原本不会存在的问题。所以,模板系统没有任何价值,没有任何优势。

但是,有一个例外,我认为使用非PHP模板系统是合理的:当视图逻辑程序员必须对模板具有有限的访问权限时。例如,如果您是博客托管系统的提供商,并且希望允许用户对其模板进行个性化和编码,而不允许他们执行任意代码。然而,这一论点不适用于设计师愿意学习一些代码来帮助编写UI的情况。如果他能学会Smarty,他肯定能学会PHP。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/436014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档