为什么几乎所有的PHP框架都使用"<?php echo ...?>"

Wer*_*ght 5 php templates frameworks smarty php-shorttags

  • PHP短标记<?= $var ?>已被弃用了一段时间.
  • 几乎所有PHP框架都 使用长格式 <?php echo $var ?>(例如,交响乐,Yii,Kohana)
  • Smarty是一个着名的PHP模板引擎,支持更短的形式{$var}
  • 模板引擎(如Smarty)对于网页设计师来说更容易
    • 编辑模板显示{$var}而不显示任何内容(因为<..>)
    • 更短的语法(更少打字,尤其<>是在某些键盘布局上使用相同键时)
    • 模板经过预编译和缓存,几乎可以提供相同的性能

所有这些点让我想知道,为什么所有框架似乎都使用超长的PHP语法?有没有使用像Smarty这样的模板引擎的强项(除了小开销)?

zom*_*bat 15

关于PHP的事情是它已经一种模板语言.

Smarty虽然很好,却增加了开销.如果你没有充分的理由使用它,那你为什么要这样做?使用后端框架的人是熟悉PHP的开发人员,因此没有理由让他们使用带有新语法的模板引擎来学习它.

大多数框架足够灵活,添加模板引擎并不需要太多工作.如果构建的框架迫使您使用Smarty,那么它将不那么受欢迎,因为框架本身的灵活性会降低.

关于"长语法",没有框架会对具有安全性问题的弃用语法挂起.它可以留给框架的用户,如果他们想要使用或不使用(现在没有人应该使用),但围绕短标签构建核心框架使其不那么便携.


Sam*_*son 10

我不知道我会称之为<?php print $foo; ?>"超长语法".

事实是,短标签并不总是在服务器上启用,而标准默认值通常是.这条路线更安全.


lee*_*ers 9

像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语法可能会稍微清晰一点 - 但老实说,除了程序员之外,是否有人能够轻松地使用任何代码集?模板引擎添加了额外的处理/逻辑层,而没有提供任何重大好处.

  • 准确地说Smarty并没有让它更清晰.PHP代码与智能代码一样简单.坚持php! (8认同)

Jak*_*kob 5

以下是Symfony框架的Fabien Potencier 关于模板引擎的说法:

为什么人们仍然认为PHP是模板引擎?果然,PHP作为一种模板语言开始了它的生命,但它近年来并没有像现在这样发展.如果您认为PHP仍然是一种模板语言,您能否仅仅给我一个PHP语言的最新变化,它将PHP作为模板语言进行了增强?我想不出一个.

他还用模板语言描述了他所寻找的功能:

  • 简洁
  • 面向模板的语法
  • 可重用性
  • 安全
  • 沙盒模式

除了使他最喜欢的模板语言Twig脱颖而出的一些功能:

  • 本机模板继承(模板编译为类);
  • 可靠的自动自动转义(在编译期间完成所有操作时不会产生相关的运行时开销);
  • 非常安全的沙箱模式(白名单可以在模板中使用的标签,过滤器和方法);
  • 极佳的可扩展性:通过捆绑自己的标签和过滤器作为扩展,覆盖所有内容,甚至是核心功能; 但您也可以在编译之前操纵AST(抽象语法树).通过利用这种可能性,您甚至可以创建自己的DSL(域特定语言),针对您的应用程序.

在文章的评论中,他说,"它可能是Symfony 2的一部分.但我首先需要一些社区反馈."

阅读完整的文章,让他的整个论点有利于模板系统.

  • 听起来很多开销. (2认同)