PHP中的短标签是好的实践吗?

4
如果我启用了短标签 = true,那么我可以像下面这样使用:
<?=$variableName ?>

与其

<?php echo $variableName ?>

我有以下问题:
  1. 这是一个好的实践吗?
  2. 是否存在服务器依赖性?
  3. 所有开源和框架都支持此项技术吗?

所有服务器和框架都默认支持它。 - Sunil Pachlangia
可以使用短标签来实现这个目的,没有服务器依赖。但是我不确定所需的PHP版本,任何较新的版本都可以。 - Frank
这可能会回答你的问题:http://programmers.stackexchange.com/q/151661 - Rizier123
1
@SunilPachlangia - 仅当您的服务器运行现代、受支持的 PHP 版本 (>=5.4) 时才能使用。由于许多原因,这并不总是实际情况。 - DanielM
4个回答

6
短标签<? doSomething(); ?>被认为是一种不好的做法,因为它们不符合XML标准...你是否关心这个问题另当别论。
短的输出<?= $myString ?>并不是一种不好的做法,只是不是最好的。PHP是一个模板引擎,然而更好的引擎(如TwigMustacheSmarty等)可用。大多数框架包含自己的模板引擎,因此无需使用短标记。
在PHP 5.3及以下版本中,这些类型的标记被认为是同一件事。然而,自PHP 5.4以来,它们已经被分离出来,可以在没有打开enable-short-tags的情况下使用短输出。由于PHP 5.3已不再受支持,唯一的问题是如果你被迫使用不受支持的版本,这显然有它自己的影响。 :)

3
  1. 这本身并不是坏的实践。新版本的PHP已经默认开启,但旧版本可能已启用或未启用。因此,如果您希望每个人都能运行您的代码,则应选择使用<?php。如果您不关心旧版本的PHP(即没有向后兼容性问题),那么就随意使用。

  2. 没有服务器依赖。您只需要启用它即可。

  3. 框架通常为贡献者制定指导方针。您个人使用哪一个框架与框架本身无关,而是与是否启用该功能有关。


1
  1. 这不是一个好的实践方法。我为什么这样说呢?因为假设你想要将代码推送到生产环境,而你正在使用共享主机。在PHP 5.4.0以上版本中,默认启用php短标签。如果共享主机使用旧版本的PHP,那该怎么办呢?有些共享主机无法覆盖php.ini设置。如果你想使用php短标签,必须在php.ini中启用它。请参考下面的链接。PHP短标签也可能与XML代码冲突。

    http://php.net/manual/en/ini.core.php#ini.short-open-tag

  2. 没有服务器依赖性。

  3. 它完全不依赖于框架。


如果你为PHP 5.4编写代码,然后在5.3上运行它,你将会遇到许多其他问题。这并不意味着使用该功能是一种不好的实践。 - DanielM

0
为了确保变量在可能运行代码的所有服务器上正确打印,建议使用<?php echo $variableName; ?>。我个人总是使用这种方法。
但是,如果您正在开发个人项目或简单项目,并且知道您将可以访问php.ini或者不计划移动到另一个服务器,则可以安全地使用它。
此外,在PHP 5.4及以上版本中,默认允许使用<?=,这意味着所有当前支持的PHP版本都支持此功能。关于short_open_tag,可以从php.net获得更多信息:

在PHP 5.4.0之前,该指令也会影响shorthand <?=,它与<? echo相同。使用此快捷方式需要打开short_open_tag。自PHP 5.4.0以来,<?=始终可用。

因此,简而言之,回答您的三个问题:
  1. 这是个好习惯吗?不是
  2. 有任何服务器依赖性吗?有(需要在服务器上启用)
  3. 所有开源和框架是否支持它?不可能对所有情况做出判断。使用完整版本的一个好理由

但如上所述,如果您只在支持PHP的版本的服务器上运行代码,则可以放心使用它。


我必须说,对于任何“支持的”PHP版本,我觉得这个答案在每个方面都是不正确的。在提问时,这是PHP 5.4及以上版本。如果作者,似乎是这种情况,正在使用不受支持的版本,则应单独解决此问题。 - DanielM
是的,我同意提到截至今天为止的所有支持版本都支持<?=,因此通常情况下使用它是安全的 - 我已经将它添加到我的答案中。然而,我仍然认为这不是一个好的做法。根据这些统计数据(http://blog.pascal-martin.fr/post/php-versions-stats-2014-10-en.html),仍然有相当多的服务器使用PHP 5.3或更低版本(PHP 5.3占44.26%,PHP 5.2占22.75%)。这些统计数据来自2014年10月,但我认为它仍然有效,并且我猜测这两个版本的数字总和没有下降到可以忽略的程度。 - leopik
人们目前在他们的服务器上拥有什么并不真正影响如何回答这个问题。73%的人做错了,这并不意味着我们应该推荐将其作为最佳实践...但也许这只是我的想法。 - DanielM
从技术上讲,无论 OP 是否使用 <?= 都完全无关紧要。在当前版本中,两者都是正确的。但正如你所说,73% 的人做错了,这必须考虑到。他的应用程序仍然有可能最终运行在一个将短标签设置为 false 的服务器上,导致应用程序无法按预期工作。他可以责怪服务器管理员没有更新 PHP(他完全是正确的——旧版本已经过时),但归根结底,他的应用程序将无法运行,这将成为 OP 的问题。因此,使用 <?= 不是一个好的实践。 - leopik
这是一个更好的答案。你应该把它加入到原因中。 ;) - DanielM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接