我目前正在讨论PHP作为模板引擎与PHP之上的模板引擎之间的选择.
你有什么选择,为什么?
我说为什么当PHP是模板引擎本身时使用另一个模板引擎.
对于模板引擎:
为最终用户定制添加了安全性.纯PHP中的主题具有无限制的对用户及其安装造成伤害的能力.因此,模板引擎可以消除这种风险,如果它是一个好的风险.
易于使用的非程序员,如图形艺术家或网页设计师.
对于plain-php:
纯PHP的速度无法与其上构建的任何模板引擎匹配.
PHP 的全部功能可用于输出,而不仅仅是解释或过滤部分.
如果可能的话,我更喜欢PHP本身.并且大多数人不想通过制作自定义主题来破解您的软件,因此很容易粗略阅读并调查其安全性.也就是说,我是那个同时兼顾模板和编程,甚至是一些图形艺术的"人之间"; 我的技能与严格的程序员和严格的艺术家/设计师不同.
我发现当我介绍Smarty时,让网页设计师用巧妙的变量制作HTML是相当简单的.编程团队的人员现在专注于更多的后端工作,即Smarty变量内容的制作.
这缩短了开发生命周期,工作可以在更多人之间分配,最终导致更好的设计.
嗯,这只是我的意见,但模板引擎很糟糕.您必须首先了解模板引擎的实现方式,然后了解如何使用它.这似乎只是浪费时间,因为PHP单独做得最好,并提供更多的灵活性.
以下原因适用:
使用引擎将应用程序分离为模板会使应用程序不再容易停止代码错误
使用模板可以在重构时为您提供更大的灵活性,因为命名空间不会直接构建到应用程序中
使用模板可以鼓励(强制)开发人员保持表示层的业务逻辑和代码.
使用模板,可以更轻松地模拟数据集并将其传递给模板引擎,并预览网站与数据的外观
如果您有非程序员在执行模板,那么使用模板引擎会很有帮助.在许多情况下,简化的模板语言对于非程序员来说比PHP本身更容易获取.
也就是说,当我只是我(或我和其他开发人员)时,我发现自己不再使用模板了.
PHP 不是模板引擎,而是一种可用于编写模板或模板引擎的语言.模板引擎不仅仅是一种语言,而且还是允许脚本定位,组织模板或将脚本中的数据分配给它们的编程API.纯PHP绝对没有任何东西 - 它只是一种语言.相反,你应该把这些库,如Zend Framework中的Zend_View进行比较(基本上,它与Smarty完全相同,除了它使用PHP编写模板).您应该询问是否应该使用PHP或其他模板语言作为模板语言.
当谈到模板语言本身时,那么......普通的循环和条件足以编写模板,但这"足够"并不意味着它简单,舒适,高效或灵活.PHP没有为模板设计者提供任何特殊功能,但许多"模板语言"(如Smarty)只提供了有限的PHP子集,因此程序员选择PHP并不奇怪.至少他们可以编写函数并使用OOP,这对于我来说太大了(在我看来),但确实有效并且确实有帮助.
关键是自定义模板语言不受PHP缺点的限制,但是他们的设计者不会看到它,声称"显示变量和循环就足够了".可能的区域,模板语言可能更有效:
表单显示和呈现(我没有看到任何使用PHP作为模板语言的框架,它提供了一个简单,灵活和通用的系统来自定义表单外观).
理解HTML/XML文档结构.
自动XSS注入过滤器.
解决表示层中的各种常见问题(即自定义分页系统的外观,在列中显示数据等)
模板可移植性以及应用程序逻辑和实现细节与模板的真正分离.
在PHPTAL和Open Power Template 2之上提到了遵循这种方式的模板语言的例子.在TinyButStrong中也可以找到一些类似的想法,但不幸的是这个模板引擎非常慢.
当您混淆HTML语法时,PHP作为模板引擎不会抱怨.它会让你忘记关闭标签,错误嵌套标签等.
默认情况下,PHP的输出不会被转义,因此除非您记得在htmlspecialchars()
任何地方严格添加,否则您的站点将具有HTML注入(XSS)漏洞.
Hello = $name ?>
当您尝试正确生成XHTML时,这些问题会更严重.这并不是说你不能用普通的PHP做到这一点 - 当然你可以 - 但这需要更多的努力和勤奋.
这就是为什么我的推荐是PHPTAL.OPT2也行.
PHP非常适合大多数任务,但模板引擎可以帮助项目更轻松地扩展.
如果您没有时间自己动手(并且不需要超过他们提供的),那么像Smarty或PHPTAL这样的现成品非常棒.此外,如果您发现需要更专业的东西,您可以在以后使用自己的实现轻松替换/修改它们.
我个人对PHPTAL有很好的体验,主要是因为它不会让你感到困惑并且很简单.
Savant就是你要找的.它是一个很好的包装类,允许您在模板中使用PHP运算符,而不是在PHP之上解释新的模板语言.
优点:
没有为系统添加额外的工作是有道理的.
没有开发人员的学习曲线如果你们每个人都受到纪律处分,那么这就是你要走的路.器(Savant)
缺点:
尽管Savant鼓励您正确分离,但它并没有强迫开发人员将业务逻辑与开发代码分开.我有一个永远不应该被打破的规则.您只能在模板中输出变量,使用条件和循环.您绝不允许开发人员在模板中创建变量.不幸的是,无论你告诉他们多少次,开发人员似乎都不会这样做.因此,使用像Smarty这样的引擎会变得有价值,因为开发人员被迫完全保持业务和设计的区别.
如果我正在为自己做一个项目或者没有很多开发人员,我倾向于使用Savant.如果它的项目比我大得多,那么在建筑学中我会选择像Smarty这样的东西.
无论哪种方式,代码中的分离都是使用Savant或Smarty的重要天气.我相信那里还有其他好的选择.