azhedashuaibi 2019-06-26
Smarty的主要设计理念是:干净的分离显示逻辑和程序代码,在PHP为后端情况下,Smarty模板应用在前端,增强PHP的前后端交互性能,并且给前后端分离情况下程序员的开发、部署带来方便,语法简单易懂,即使不懂PHP也完全可以掌握Smarty。
有人会说,为什么不直接用PHP进行前台渲染?
PHP与模板分离的重要性
语法:模板语法通常是更符合HTML标记的语义。PHP语法可以在程序代码中运作的很好, 但如何混合在HTML中就不然。Smarty简单的{标签}语法是为了表达显示逻辑而设计的。 Smarty让你的模板更专注于页面显示,而不用关注太多“代码”。 这可以让模板开发得更快速,维护更容易。 学习Smarty的语法不需要懂得PHP的相关知识,程序员或非程序员都能很快上手。
松耦合:当PHP代码混合在模板中,那将无法约束任意的逻辑代码被写到模板上。 Smarty分隔了模板和PHP,控制了页面显示和业务逻辑的分离。 Smarty还有安全特性,可以令模板源码有强制的约束。
页面设计者和PHP
一个通常的问题是:“页面设计者既然要学一门语法,为什么不学PHP?”。当然页面设计者可以 学习PHP,而且他们可能已经非常熟悉PHP。问题并非是他们是否有能力学习PHP,问题在于HTML混合PHP的情况,如果设计者使用PHP,那么就很容易会将一些不属于模板的PHP代码写到模板上。 (正如当他们只需要一把小刀但你塞给他们一把瑞士军刀一样)。 你可以教导他们程序设计的规则,但这可能是他们不真正需要学习的事情(他们不是开发者)。 而且PHP手册也是非常繁多难以筛选出你需要的部分进行教导, 就像你给了车子的买主一本汽车工厂里面的装配手册,而不是汽车的操作手册一样。 Smarty恰到好处地给予了设计者需要的工具,而提供了开发者更好地控制这些工具的方法。 这种简单的标签语法也是非常受到设计者的欢迎,帮助了设计者流水式地组织管理模板。
一句话概括:Smarty是一个PHP的模板引擎
更准确的说:Smarty可以更好的帮助开发者分离程序逻辑和页面显示,如在前后端分离的项目中,前后端为不同开发人员,那么Smarty便可以做到在互相不影响的情况下完美的实现前后台的协作。并且业务逻辑和显示逻辑分离,是Smarty的一个设计理念。
非常快速。
比PHP内嵌到HTML中的做法要有效率的多。
比PHP内嵌到HTML中的做法要有效率的多。
无模板解析的开销,只编译一次。
仅当模板文件被修改后才会聪明地重新编译。
你可以很容易创建自己的函数和变量修饰器,非常具有可扩展性。
可配置的模板定界符语法{delimiter}, 你可以使用{$foo}, {{$foo}}, <!--{$foo}-->等等。
条件判断语句 {if}..{elseif}..{else}..{/if} 会直接使用PHP解析,所以{if...}后可以是简单或者较复杂的表达式。
支持无限的 sections, if等的嵌套。
内置缓存支持。
任意的模板源。
模板继承 可以轻松管理模板和内容。
在底层,Smarty“编译”(简单地复制和转换)模板为PHP代码。这在每个模板第一次调用时发生,然后编译后的代码将被一直使用。Smarty处理地非常的好,所以模板设计师仅编辑模板而不需要关注编译的事情。这方法保持了模板的易维护,同时也保证了运行时是PHP代码的方式运行,这样PHP代码就可以通过类似APC等OP-CODE缓存器来加速了。
Smarty不是一个应用开发框架。Smarty不是一个MVC。Smarty不像Zend Framework, CodeIgniter, PHPCake, 或者其他的PHP应用开发框架。
Smarty是一个模板引擎,在应用程序中,当作V层(视图层)的组件来使用。 Smarty可以很轻易连接到其他的视图引擎中。 和其他的软件技术一样,Smarty也有着学习曲线。 Smarty不一定保证良好的程序设计或者达成显示分离的目的,这还得需要开发者和模板设计师的努力。