【问题标题】:Using <?php ?> VS. <? ?> [duplicate]使用 <?php ?> VS。 <? ?> [重复]
【发布时间】:2011-08-14 05:57:01
【问题描述】:

可能重复:
Are PHP short tags acceptable to use?

我们目前正在混合使用这两种样式在我们的 phtml 文件中编写 php 代码。似乎没有什么问题,但我只是对使用一个而不是另一个感到好奇。

(寻找更多的东西......“最佳实践”答案)

【问题讨论】:

  • 讨论围绕着可移植性。如果您知道 php_value 或者可以编写一个在两者之间转换的 Perl 单行代码,那么这不是问题。
  • 答案是关于最佳实践。你还追求什么?最糟糕的做法?

标签: php


【解决方案1】:

&lt;? ?&gt; 称为短标签,需要在服务器的 php ini 文件中启用。你不应该使用它们的唯一原因是因为兼容性,在我看来这没什么大不了的,但是如果你正在编写一个应该被其他服务器上的其他人使用的 CMS,你应该使用普通标签@ 987654322@

【讨论】:

  • 我很好奇您为什么认为兼容性不是“大问题”?事实上,对于像万维网这样的系统,根据定义,全世界数十亿人可以通过各种技术访问,因此兼容性是一个巨大的交易。
  • 如果您可以控制自己的服务器,那么为什么与不运行您的代码的神话般的其他服务器兼容?
  • @TomalakGeret'kal 如果脚本仅在您自己的服务器上运行,兼容性不是什么大问题,因为您控制了服务器@MattGreer,这可能是他的脚本不仅要在他自己的服务器上运行,就像一个开源项目或者一个像swiftpanel这样的系统
  • 您在最初断言兼容性“没什么大不了”时没有指定该标准。 :)
  • @MattGreer:当你不可避免地发现自己要移植到不同的服务器时,让生活变得不那么困难。除非您可以预测未来并且知道您只会永远将此特定机器用于此代码库。
【解决方案2】:

&lt;? ?&gt;语法需要在php.ini中设置为“on”,所以可能不起作用

&lt;?php ?&gt; 始终有效。

【讨论】:

    【解决方案3】:

    始终可用:

    • &lt;?php & ?&gt;(最常见)
    • &lt;script language="php"&gt; & &lt;/script&gt;(最不常见)

    short_open_tagsphp.ini 指令启用:

    • &lt;? & ?&gt;(短标签)允许&lt;?=$var;?&gt;,以便您可以回显。
    • &lt;% & %&gt;(ASP 风格)

    当我发布代码时,我总是使用&lt;?php?&gt;,因为它在整个 PHP 生态系统中都受支持。如果您使用短开放标签并分发代码,则有可能某些客户端将无法使用它。

    【讨论】:

    • 有些安装的 PHP 可能没有 GD、MySQL 或任何数量的可选 PHP 组件。如果您坚持只包含“保证”的功能,那么您将编写非常无用的脚本。
    • @meagar:确实有些事情是可以预期的,但是对于这样的事情,不应该考虑这样的事情。当我发布代码时,我从来没有遇到过没有 GD 或 MySQL 的人的问题,但是我确实遇到了他们没有启用短标签的问题。基本上,从 git go 构建兼容脚本有什么问题?
    • 避免使用有用的功能,因为有人可能错误地配置了他们的服务器以禁用该功能是愚蠢的。我不提倡在可再发行库中使用短标签,其中每个文件都应该包含一个开场 &lt;?php 反正。我am 提倡在模板文件中使用短标签,在这种情况下,混合 HTML 和长 &lt;?php echo ... ?&gt; 语句是可怕的和适得其反的。如果您将短标签作为给定,PHP 仅可用作模板语言。
    • @meager: 将它们完整地写出来可能不太方便,但我几乎不明白为什么它不会“有用”。
    • 应该注意的是,从 PHP 5.4 开始,回显 &lt;?=$var;?&gt; 的简短语法始终可用,无论 short_open_tags 中的设置如何。
    【解决方案4】:

    &lt;?=$var?&gt; 是在使用 PHP 模板时输出变量的唯一合理方式。将页面上的每个变量写为&lt;?php echo $var ?&gt; 是一件很痛苦的事情。因此,如果您是受虐狂(或使用不同的模板),请选择长格式,否则请坚持使用短格式(至少在模板中)

    【讨论】:

    • @Tomalak - 做个好人。如果您对某个答案存在技术分歧,请以专业的方式进行讨论。我已相应地编辑了您的评论。
    • +1 关于将 PHP 与 HTML 混合使用很好的评论,尤其是在视图上。不过,我不相信需要使用短标签。为了一致性和可读性,我总是使用&lt;?php ?&gt;
    • @Tomalak 你完全不正确。用 PHP 编写模板没有任何问题,这就是 PHP 的用途。 PHP 是一种模板语言。它的明确目的是生成 HTML。它是一种特别糟糕的模板语言,不使用短标签。没有人愿意每次输出变量时都写&lt;?php echo $x ?&gt;
    • @meagar:C++ 首先是一种过程语言;这不会阻止强烈推荐使用对象以促进模块化和可重用性。这里也一样。
    • @Tomalak 不,C++ 首先是一种专注于 OOP 的多范式语言,但这完全无关紧要,您的类比是无稽之谈。短标签没有 C++ 模拟;不推荐 C++ 的任何功能,因为有人可能会关闭该功能,从而破坏您的代码。相反,您使用完成工作所需的工具,并告诉人们“这些 是我的程序的依赖项。”仅使用可以保证每个潜在安装都支持的软件来编写软件是荒谬的。
    【解决方案5】:
    • &lt;? 也用于其他脚本语言 - 如果您在服务器上安装了多个脚本语言,则可能会导致问题。
    • &lt;? 在某些服务器配置中被禁用(short_open_tagsphp.ini 中),因此如果您的脚本应该在其他服务器上运行,请始终使用&lt;?php

    【讨论】:

    • “如果您在服务器上安装了多个”和“可能导致问题”是什么意思?有例子吗?
    • 你通过多个解释器运行你的文件做什么?如果这确实发生在您的服务器上,那么您遇到的问题比短打开标签更严重
    【解决方案6】:

    &lt;?php /* .. */ ?&gt; 是规范的。

    &lt;? /* .. */ ?&gt; 是“允许的”,但绝对不推荐。通过在您的php.ini 中将short_open_tags 设置为true 来启用此功能,这已经有一段时间没有默认了。

    基本原理超出了这个问题的范围;那里有很多文档。

    具体见this question

    【讨论】:

      【解决方案7】:

      &lt;? 不得再按here 的说明使用。

      【讨论】:

      • 您意识到引用的讨论是基于完全错误的信息? (PHP6 不再删除 short_open_tags。好吧,如果有 PHP6。)
      • 嗯,其他主题的答案有很多元素,这就是我在这里链接它的原因,但是是的,这是我承认的捷径。
      • -1 绝对错误并传播完全不正确的信息。短标签从来不在砧板上;他们哪儿也不去。
      • 这么糟糕的答案,主题已关闭,将我的链接作为别名。但我可能错过了一些东西。
      • 是的,您重复的错误信息与副本中的某些答案相同。这并不能证明给出错误答案是合理的。
      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2011-05-18
      • 1970-01-01
      • 2018-09-13
      • 2023-03-30
      相关资源
      最近更新 更多