我为什么要在PHP中使用模板系统?
我的问题背后的原因是:PHP本身是功能丰富的模板系统,我为什么要安装另一个模板引擎?
到目前为止我找到的唯一两个职业选手是:
更清晰的语法(有时)
模板引擎通常不够强大,无法实现业务逻辑,因此它会强制您分离关注点.使用PHP进行模板化可以引诱您绕过模板原理并再次开始编写代码汤.
......与利弊相比,两者都可以忽略不计.
小例子:
PHP
=$title?>
Smarty的
{$title}
我真的没有看到任何差异.
是的,正如你所说的,如果你不强迫自己在PHP(模板引擎)中使用模板引擎,那么就很容易滑倒并停止分离问题.
然而,在分离问题时遇到问题的人最终会生成HTML并将其提供给Smarty,或者在Smarty中执行PHP代码,因此Smarty很难解决您关注的问题.
也可以看看:
PHP作为模板语言或其他一些模板脚本
通过PHP插入HTML的最佳方法是什么?
人们使用模板系统的主要原因是将逻辑与表示分开.这有几个好处.
首先,您可以将模板交给网页设计师,他们可以根据自己的需要移动内容,而无需担心保持代码流.他们不需要理解PHP,只是为了知道单独留下特殊标签.他们可能必须为一些标签学习一些简单的语义,但这比学习整个语言简单得多.
此外,通过将页面拆分为单独的文件,程序员和设计人员可以同时处理同一个"页面",在需要时检入源代码控制,而不会发生冲突.设计人员可以针对稳定版本的代码测试他们的模板视觉效果,而程序员正在针对他们自己的副本进行其他可能的重大更改.但是如果这些人都在编辑同一个文件并且必须在不同的更改中合并,那么您可能会遇到问题.
它还强制执行良好的编程实践,以使业务逻辑远离表示逻辑.如果您将业务逻辑与演示文稿混合在一起,那么如果您需要稍后以不同方式呈现它,则更难以提取它.如今,Web应用程序中不同的呈现模式越来越受欢迎:RSS/ATOM提要,JSON或AJAX响应,手持设备的WML等.使用模板系统,这些通常可以完全使用模板完成,不需要或几乎不做任何改动其他.
然而,并非所有人都需要或欣赏这些好处.PHP相对于Java/Python/Ruby /等的优势在于,您可以快速攻击具有某些逻辑的网页,这一切都很好.
使用非PHP模板以分离逻辑为借口是无稽之谈.如果开发人员不了解业务视图逻辑分离是什么以及应该如何完成,那么必须适当地解决问题.否则,您最终会在业务逻辑中使用HTML或在模板中使用业务逻辑 - 没有模板引擎会为您节省开支.你必须向开发人员讲授基础知识.
如果开发人员确实理解这一点,模板系统只是一个限制.它不会给开发过程增加任何价值,只是学习新语法,保持另一个库最新,执行速度较慢的开销.虽然后者可以通过缓存和诸如此类的方法来解决,但这只能解决原本不存在的问题.因此,模板系统没有任何价值,也没有任何优势.
但是有一个例外,我认为使用非PHP模板系统是合理的:当视图逻辑程序员必须具有对模板的有限访问权限时.例如,如果您是博客托管系统的提供商,并且您希望允许您的用户对其模板进行个性化和编码,而不允许他们执行任意代码.这种说法,然而,这并不适用于那些设计师为愿意学习一些代码,以帮助编程界面的情况.如果他能学习Smarty,他肯定可以学习PHP.
模板系统仍然有充分的理由使用,但不是Smarty,而是PHPTAL.PHPTAL模板是有效的XML(以及XHTML)文件.您可以在PHPTAL中进一步使用虚拟内容,从而获得具有最终外观的有效XHTML文件,可以使用标准工具进行处理和测试.这是一个小例子:
First Name | Last Name | Age |
---|---|---|
Max | Mustermann | 29 |
PHPTAL模板引擎将自动插入来自users数组的所有值并替换我们的虚拟值.尽管如此,该表已经是有效的XHTML,可以在您选择的浏览器中显示.
对我来说,模板引擎的一大特色就是缓存层对你来说是透明的.我很久以前就一直在使用smarty,缓存的东西让生活更轻松.智能设计也允许您使用自己的缓存功能.在我的情况下,我选择是否某些页面应该使用memcache或磁盘来存储模板输出.
另一方面,如果您的网站流量很大,而且您不知道如何管理聪明并调整它,那么任何模板引擎都可能成为网站杀手.但即使不使用smarty,您的网站也会死亡.
flickr目前正在使用smarty.它不应该太糟糕,不是吗?
PHP 是一个很值得模板系统.关键是强迫自己将逻辑与演示分开.使用Smarty或类似的东西只会使混合逻辑和表示稍微不方便.如果你不能让自己独立,使用模板系统是没有用的.它所要做的就是消耗额外的处理能力.
关键是不要改变演示代码中的任何值.要做到这一点,我认为如果你使用if/endif语法,PHP本身就像Smarty一样有效:
Some text!