代码之家  ›  专栏  ›  技术社区  ›  Wernight

为什么几乎所有的PHP框架都使用“<”?PHP回音…?>

  •  5
  • Wernight  · 技术社区  · 15 年前
    • php短标记 <?= $var ?> 已经 贬低 有一段时间。
    • 几乎所有 PHP框架 使用长形 <?php echo $var ?> (例如, symphony , Yii , Kohana )
    • Smarty 是一个著名的PHP模板引擎,它支持较短的表单 {$var}
    • 模板引擎(如 聪明的 )对网页设计师来说更容易
      • 编辑模板显示 {$var } 而不是什么都不显示(因为 <..> )
      • 较短语法 (少打字,尤其是在 <> 在某些键盘布局上使用相同的键)
      • 模板是预先编译和缓存的,提供了几乎相同的 表演

    所有这些都让我想知道,为什么所有框架都使用超长的PHP语法?不使用模板引擎有什么好处吗? 聪明的 (除了小开销)?

    8 回复  |  直到 12 年前
        1
  •  5
  •   Jakob    15 年前

    这是symfony框架的fabien potencier has to say about templating engines :

    为什么人们仍然认为PHP是 模板化引擎?够了,php 以模板的形式开始它的生命 语言,但它并没有像 最近几年。如果你认为 PHP仍然是一种模板语言,可以 你最近给我换了一个 增强了php功能的php语言 模板语言?我想不起来 一个。

    他还描述了他在模板语言中寻找的功能:

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

    以及他最喜欢的模板语言的一些特性 Twig 脱颖而出:

    • 本地模板继承(模板编译为类);
    • 可靠的自动转义(没有相关的运行时开销 一切都是在 汇编);
    • 非常安全的沙盒模式(白色列出标签、过滤器和 可用于模板);
    • 很好的可扩展性:通过 将自己的标签和过滤器捆绑为 一个扩展;但是你也可以 操作ast(抽象语法 树)编译前。通过 利用这种可能性,你可以 甚至创建自己的DSL(域 特定语言),针对您的 应用。

    在文章的评论中,他说,“这可能是symfony 2的一部分。但我首先需要一些社区反馈。”

    the full article 让他整个论点支持模板系统。

        2
  •  15
  •   zombat    15 年前

    关于php的问题是它已经 模板语言。

    聪明的,尽管它是好的,增加了开销。如果你没有充分的理由使用它,那你为什么要这样做?使用后端框架的人是已经熟悉PHP的开发人员,因此没有理由让他们使用具有新语法的模板引擎来学习。

    大多数框架都足够灵活,添加模板引擎不需要很多工作。如果构建的框架迫使您使用smarty,那么它就不那么流行了,因为框架本身的灵活性会降低。

    关于“长语法”,没有一个框架会因为安全问题而对已弃用的语法置之不理。如果框架的用户想使用它或者不想使用它(现在没有人应该这样做),可以把它留给框架的用户,但是围绕短标签构建一个核心框架会降低它的可移植性。

        3
  •  10
  •   Sampson    15 年前

    我不知道我会打电话 <?php print $foo; ?> “超长语法。”

    事实上,短标记并不总是在服务器上启用,而标准默认值通常是。走那条路比较安全。

        4
  •  9
  •   Reto Meier    15 年前

    像smarty这样的模板引擎添加了一个不需要的额外处理层——它们大多是膨胀软件。他们通常会添加太多的额外处理,以达到句法上的糖分。当完整的PHP标签可用时,使用模板引擎就像戴上了镣铐——它变成了另一种语言,它有自己的特性需要学习,以便用常规的PHP完成相同的事情。

    根据我的经验,我很少看到非程序员完全或轻松地使用模板引擎。以这两个例子为例:

    Smarty:

    <select>
    {foreach from=$k item=v}
     <option value="{$v.value|escape:'html'}">{$v.label|escape:'html'}</option>
    {/foreach}
    </select>
    

    PHP:

    <select>
    <?php foreach ($k as $v) { ?>
     <option value="<?php echo htmlentities($v['value']); ?>"><?php echo htmlentities($v['label']); ?></option>
    <?php } ?>
    </select>
    

    现在,smarty语法可能稍微干净一点,但老实说,有人吗? 除了 一个程序员能够轻松地使用这两种代码集吗?模板引擎在不提供任何主要好处的情况下添加了额外的处理/逻辑层。

        5
  •  3
  •   Community CDub    7 年前

    有一些原因:

    • 出于安全考虑,将来的PHP版本将不推荐使用它们。
    • 有些主机会禁用它们。

    更多:

    Are PHP short tags acceptable to use?

    不推荐使用,因为它是 如果你必须移动你的 代码发送到服务器 支持(您无法启用)。 正如您所说,许多共享主机 支持短标签,但“很多”不是全部 其中。如果你想分享你的 脚本,最好使用完整的 语法。

    我同意

    我不买可读性作为理由 全部。大多数严肃的开发人员都有 语法突出显示选项 可供他们使用。

    更多

    http://terrychay.com/article/short_open_tag.shtml

        6
  •  3
  •   Gordon Haim Evgi    15 年前

    打开的短标签是 已弃用,它们也将 在PHP6中移除。

    链接的文章还包含许多关于这个主题的有用信息。

    报价 Rasmus Lerdorf (第三链接):

    我看到的大多数论点基本上都是说 <? 是邪恶的,它甚至不应该存在,但这不是当前的问题。它确实存在,我们不会删除它,所以这里唯一真正的参数是代码引入的wtf因子,它能够动态地启用或禁用这些标记。这是我所看到的唯一有效的论据。是否可以用xmlint验证PHP代码以及是否可以 <? 是有效的XML,但显然不是,它完全站不住脚。我们都知道当你使用 <? 您不符合XML。对绝大多数人来说,这没关系。[艾斯]

    我的观点是人们想要模板化。尽管我很讨厌这个概念,而且一直以来都非常直言不讳,但人们希望使用更简单的模板标记。它们甚至可以解析文件并在每个请求上生成PHP代码,以便使用 {blah} 而不是 <?php blah() ?> . 事实上,人们愿意接受一个数量级的性能冲击的句法糖是困扰我,但只要看看所有的模板系统。是的,我知道使用模板还有其他的原因,比如限制不受信任的模板编写器的特性集等等,但是你会惊讶于有多少人只想少打一些,让他们的标签更漂亮。让这些人切换到 <?blah()?> 在我的书中是一个表现和理智的胜利。是的,这不是一场完全的胜利,但它仍然是一场胜利。


    就我个人而言,我尽量避免使用模板化系统,因为我发现常规的PHP语法更容易用作模板化语言,它可以重新设计PHP可以实现的功能。通过添加viewhelper,任何设计人员都不应该在使用常规语法时遇到太多问题。事实上,我一直在争论, 模板引擎(如 Smarty )对网页设计师来说更容易 相当轻视。冗长的PHP语法在美学上可能并不吸引人,但任何半脑的人都可以学习它。

        7
  •  2
  •   Sasha Chedygov    15 年前

    因为他们不想包括一个像smarty那样大的库,以使模板缩短几个字符。

        8
  •  2
  •   Manos Dilaverakis    15 年前

    除了其他答案之外,还有一些事情使Smarty(和类似的模板引擎)有问题。

    第一个问题是,如果要在模板中放入javascript,则需要转义模板中的一些字符。如果您的javascript是由PHP动态创建的,那么它会变得更糟;代码的可读性会急剧下降。

    第二个也是最重要的是,当您在一个体面的OO框架中工作时,smarty会严重降低代码的功能。当使用PHP作为模板引擎时,您可以在模板中使用$this来调用正在分析模板的控制器中的方法。不仅如此,您还可以访问控制器继承的所有方法。 使用smarty,您将失去整个功能,因为$this不再指向您的控制器。本质上,您只能访问Smarty有限的功能,而不是从模板访问整个框架。