以下是官方文件提供的信息:

有四对不同的 可以是开始和结束标记 用于PHP。其中两个<?php ? > And <script language="php"> </script>, 总是可用的。另外两个 是短标签和ASP风格标签,和 可以打开和关闭从 Php.ini配置文件。因此, 而有些人发现短标签和 ASP样式标签方便,它们都是 便携性较差,而且通常不是 推荐。

根据我的经验,大多数服务器都启用了短标记。打字

<?=

比打字方便多了

<?php echo 

程序员的便利性是一个重要因素,那么为什么不推荐他们呢?


当前回答

PHP短标记(<?)和快速回显标记(<?=)之间必须有明确的区别。

前者是PHP编码标准所禁止的,主要是出于常识,因为如果您必须将代码移到不支持它的服务器上(并且您不能启用它),那么它就是一个PITA。正如你所说,许多共享主机确实支持短标签,但“许多”并不是全部。如果您希望共享脚本,最好使用完整的语法。

而简略的回显标记<?=不能禁用,因此完全可以使用。

我同意<?对程序员来说比<?PHP,但只要每次使用相同的表单,就可以进行批量查找和替换。

我根本不认为可读性是一个理由。大多数认真的开发人员都可以选择语法高亮显示。

正如ThiefMaster在评论中提到的,从PHP 5.4开始,<?=……?>标签在任何地方都被支持,不管shortttags设置如何。这应该意味着在可移植代码中使用它们是安全的,但这也意味着依赖于PHP 5.4+。如果你想支持5.4版本之前的版本,并且不能保证短标签,你仍然需要使用<?PHP回显…? >。

此外,您还需要知道ASP标记<%、%>、<%=和script标记已从PHP 7中删除。因此,如果您想要支持长期可移植的代码,并想要切换到最现代的工具,请考虑更改这部分代码。

其他回答

以下是其美妙的流程图:

来源:关于软件工程堆栈交换的类似问题

我在寻找了这个主题的信息后读了这篇文章,我觉得有一个主要的问题没有被提及:懒惰vs.一致性。PHP的“真正”标签是<?PHP和?>。为什么?我真的不在乎。这些明明是PHP的,为什么还要用别的东西呢?<%和%>对我来说是ASP, <script .....意味着Javascript(在大多数情况下)。因此,为了一致性、快速学习、可移植性和简单性,为什么不坚持标准呢?

另一方面,我同意模板中的短标签(仅在模板中)看起来很有用,但问题是我们在这里花了这么多时间讨论它,可能会浪费很长时间来输入额外的三个字符“php”!!

While having many options is nice, it's not at all logical and it can cause problems. Imagine if every programming language allowed 4 or more types of tags: Javascript could be <JS or < script .... or <% or <? JS.... would that be helpful? In the case of PHP the parsing order tends to be in favor of allowing these things, but the language is in many other ways not flexible: it throws notices or errors upon the slightest inconsistency, yet short tags are used often. And when short tags are used on a server that doesn't support them, it can take a very long time to figure out what is wrong since no error is given in some cases.

Finally, I don't think that short tags are the problem here: there are only two logical types of PHP code blocks-- 1) regular PHP code, 2) template echoes. For the former, I firmly believe that only <?php and ?> should be allowed just to keep everything consistent and portable. For the latter, the <?=$var?> method is ugly. Why must it be like this? Why not add something much more logical? <?php $var ?> That would not do anything (and only in the most remote possibilities could it conflict with something), and that could easily replace the awkward <?= syntax. Or if that's a problem, perhaps they could use <?php=$var?> instead and not worry about inconsistencies.

在有4个打开和关闭标签的选项以及随机添加一个特殊的“echo”标签的情况下,PHP也可以在PHP .ini或.htaccess中有一个“自定义打开/关闭标签”标志。这样设计师就可以选择他们最喜欢的。但出于显而易见的原因,这太过分了。那么为什么要允许4+选项呢?

为了避免可移植性问题,在PHP标记开始时使用<?如果你的php文件是纯php,没有HTML,你不需要使用结束标签。

短标签在某些web服务器(共享主机等)中默认是不开启的,所以如果你需要转移到这些服务器上,代码可移植性就成了一个问题。 对某些人来说,可读性可能是个问题。许多开发人员可能会发现<?PHP作为代码块的开始标记比<?当你扫描一个文件时,特别是当你被HTML和PHP紧密交织在一起的代码库困住时。

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php上有很多建议,包括:

而有些人发现短标签和 ASP样式标签方便,它们都是 便携性较差,而且通常不是 推荐。

and

如果您正在嵌入PHP,请注意 在XML或XHTML中 使用<?保留PHP ?>标记 符合标准。

and

应该避免使用短标签 在开发应用程序或 用于 重新分配,或者在PHP上部署 不属于你的服务器 控件,因为短标记可能不是 目标服务器支持。为 可移植的、可重新分发的代码 不要使用短标签。