使用<?php而不是<?来表示PHP代码

12
为什么我的PHP脚本中应该使用<?php而不是<?

这本质上是 https://dev59.com/MUbRa4cB1Zd3GeqPyTcA 的重复。 - Glen Solsberry
不是很对;那个问题是关于短标签(一种快速输出变量内容的方式),而这个问题是关于不同的标记约定。 - Jeff Winkworth
但是这些答案导致了重复。 - Glen Solsberry
10个回答

30

避免使用短标签的两个主要原因:

  1. 最大的可移植性 - <?php 在每个启用PHP的服务器上都可以工作,但是<?可能会被禁用
  2. 它与XML前置符的开头完全相同 - 可能会导致解析或执行困难

1
XML参数不计入其中。(http://hsivonen.iki.fi/producing-xml/)。XML参数与决定非标准的方式来转义SQL字符串处于同一类别。PHP团队犯了一个大错误,意外地杀死了这个短标签功能。 - stesch
1
任何禁用 <? 的服务器管理员都应该被枪毙。 - Jasper Bekkers
3
Jasper,请不要鼓吹开枪打人,除非你愿意亲眼看着目标并自己扣动扳机。 - Rob Kennedy
3
如果你所说的“shot”是指“给他一杯他最喜欢的酒”,那么我同意。 - Peter Bailey
2
好的。也许“shot”这个词太强烈了,但“punched”绝对可以。 - Orion Edwards
显示剩余4条评论

7

PHP有两种启动方法

<?php

并且

<?

PHP还包括

<?=

但是这会打印出后面的变量,因为它是对echo的简写。

你应该使用<?php,因为它兼容所有类型的服务器。你可以将代码移动到新的托管解决方案或设置新的服务器默认值,而缩写可能会被禁用。


5
短标签<?(和<?=)可能已被禁用。长版本的<?php(和<?= = <?php echo)则可在任何地方使用。
我们可以讨论PHP团队做出这种可配置决定的意义,但本质上是,您无法在便携式代码中使用短标签。

为什么会有人禁用短标签呢? - Orion Edwards
@Orion Edwards:这是一个配置选项。php.ini使得编写可移植代码变得非常困难,比必要的还要困难。如果这是一个选项,那么对于可移植代码来说就是禁忌。 :-( - stesch

3

两者在语义上是相同的。<?只是完整语法的快捷方式。


Nick,我展示的那段代码是用于ASP.NET MVC的,只是一个类比。 - Ray Booysen
但这个比喻是不正确的。PHP确实提供了一个像ASP.Net一样的实用标签,但它是<?=,正如我之前的评论所述。你纠正了你的答案,所以我给你点赞。 - nickohrn
抱歉,我尝试了一个失败的比喻。应该不将具有<%=用于不同于PHP的<?=的ASP.NET MVC进行比较。 - Ray Booysen

3

对于两个原因,我个人更喜欢关闭<?

  1. 许多大型PHP项目的编码标准建议关闭它
  2. 如果您正在生成XML文档(XML文档以<?xml version="1.0" encoding="UTF-8" ?>开始),它会创建问题
  3. (额外)<?php<?更易读且更加显眼。

1
#3 是一种不良设计。我希望PHP不要阻碍我的工作,而是尽可能地隐蔽。 - Orion Edwards

2
为了补充大家的解释,不应该使用短标记,因为它们可能会被禁用(或者甚至从未来的PHP版本中删除),而短标记被弃用的主要原因是它们不是有效的XML“处理指令”,而<?php标记是。因此,带有<?php ... ?>标记的PHP模板可以是有效的XML文档,而使用短标记的则不行。

1

需要注意的是,一些 PHP 服务器配置在开箱即用时不支持其中一个或另一个。例如,我的 Web 服务器不支持 <?,但支持 <?php。


1
这在技术上是不正确的 - 所有的 PHP 安装都支持常规(长)的起始标记,而短的起始标记可以被禁用。说“某些不支持其中之一”是事实上不正确的。 - Peter Bailey

1

可移植性的论点都很好,但我要说的是,除非你正在做一些真正广泛分发(源代码)或者专注于 XML 的事情,否则你应该放心使用短标签。

a) 我从来没有遇到过无法启用短标签的情况。通常它们默认就是开启的。

b) 在大多数情况下,<? 不会与 <?xml 混淆,因为它们在堆栈的不同层次上被解析。

c) 短标签不那么突兀,因此不会使你的代码变得混乱。我发现这在 <?php echo<?= 方面尤其如此。(你可以争辩说,你应该避免使用其中任何一个,因为这可能意味着你正在编写意大利面条式代码,但是,拜托——这是 PHP!)

当然,这完全取决于你正在处理什么样的项目,但对于一个基本的网站来说,我认为短标签不太可能对你造成伤害。


然而在未来,PHP短标签将不再被启用,所有使用该标签的代码都将在下一个主要版本中出现错误。 - X-Istence
这是真的吗?有官方来源吗? - sprugman
在php.net上,我看到建议使用长标签,这很好,但我没有看到任何正式的关于短标签被淘汰的内容。 - sprugman

0

WordPress 编码标准 表示只使用 <?php。但他们没有解释为什么。

这可能是一个信仰问题。


<?php 使代码更具可移植性,这就是为什么 WordPress 编码标准建议使用它的原因。 - nickohrn
我认为在我回答这个问题时,Stack Overflow还没有评论功能。 - Darcy Casselman

0
支持使用短标记形式<?/<?=的语法是基于php.ini文件中short_open_tag参数的设置。如果您托管自己的代码库,则很容易启用该设置。但是,在共享/托管的Web主机上,您可能无法控制此设置。
因此,为了实现最大的可移植性,您应该使用长形式的语法。

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