Wer*_*ght 5 php templates frameworks smarty php-shorttags
<?= $var ?>已被弃用了一段时间.<?php echo $var ?>(例如,交响乐,Yii,Kohana){$var}{$var}而不显示任何内容(因为<..>)<>是在某些键盘布局上使用相同键时)所有这些点让我想知道,为什么所有框架似乎都使用超长的PHP语法?有没有使用像Smarty这样的模板引擎的强项(除了小开销)?
zom*_*bat 15
关于PHP的事情是它已经是一种模板语言.
Smarty虽然很好,却增加了开销.如果你没有充分的理由使用它,那你为什么要这样做?使用后端框架的人是熟悉PHP的开发人员,因此没有理由让他们使用带有新语法的模板引擎来学习它.
大多数框架足够灵活,添加模板引擎并不需要太多工作.如果构建的框架迫使您使用Smarty,那么它将不那么受欢迎,因为框架本身的灵活性会降低.
关于"长语法",没有框架会对具有安全性问题的弃用语法挂起.它可以留给框架的用户,如果他们想要使用或不使用(现在没有人应该使用),但围绕短标签构建核心框架使其不那么便携.
像Smarty这样的模板引擎增加了一个不需要的额外处理层 - 它们主要是英国媒体报道.它们通常会添加太多额外的处理,达到语法糖的含量.当完整的PHP标签可用时使用模板引擎就像戴着镣铐 - 它成为另一种语言,它有自己的怪癖要学习,以便用普通的PHP完成同样的事情.
根据我的经验,我很少看到非程序员完全或轻松地使用模板引擎.拿这两个例子:
Smarty的:
<select>
{foreach from=$k item=v}
<option value="{$v.value|escape:'html'}">{$v.label|escape:'html'}</option>
{/foreach}
</select>
Run Code Online (Sandbox Code Playgroud)
PHP:
<select>
<?php foreach ($k as $v) { ?>
<option value="<?php echo htmlentities($v['value']); ?>"><?php echo htmlentities($v['label']); ?></option>
<?php } ?>
</select>
Run Code Online (Sandbox Code Playgroud)
现在,Smarty语法可能会稍微清晰一点 - 但老实说,除了程序员之外,是否有人能够轻松地使用任何代码集?模板引擎添加了额外的处理/逻辑层,而没有提供任何重大好处.
以下是Symfony框架的Fabien Potencier 关于模板引擎的说法:
为什么人们仍然认为PHP是模板引擎?果然,PHP作为一种模板语言开始了它的生命,但它近年来并没有像现在这样发展.如果您认为PHP仍然是一种模板语言,您能否仅仅给我一个PHP语言的最新变化,它将PHP作为模板语言进行了增强?我想不出一个.
他还用模板语言描述了他所寻找的功能:
- 简洁
- 面向模板的语法
- 可重用性
- 安全
- 沙盒模式
除了使他最喜欢的模板语言Twig脱颖而出的一些功能:
- 本机模板继承(模板编译为类);
- 可靠的自动自动转义(在编译期间完成所有操作时不会产生相关的运行时开销);
- 非常安全的沙箱模式(白名单可以在模板中使用的标签,过滤器和方法);
- 极佳的可扩展性:通过捆绑自己的标签和过滤器作为扩展,覆盖所有内容,甚至是核心功能; 但您也可以在编译之前操纵AST(抽象语法树).通过利用这种可能性,您甚至可以创建自己的DSL(域特定语言),针对您的应用程序.
在文章的评论中,他说,"它可能是Symfony 2的一部分.但我首先需要一些社区反馈."
阅读完整的文章,让他的整个论点有利于模板系统.
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |