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

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

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

<?=

比打字方便多了

<?php echo 

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


当前回答

从PHP 5.4开始,echo快捷方式与短标记是分开的问题,因为echo快捷方式将始终启用。现在这是事实:

SVN由Rasmus Lerdorf修订 邮件列表讨论

因此echo快捷方式本身(<?=)现在可以安全使用了。

其他回答

我太喜欢<?=$whatever?>让它去。从来没有问题。我会一直等到它咬到我的屁股。说真的,85%的(我的)客户在极少数情况下可以访问php.ini。另外15%使用主流主机提供商,而且几乎所有的提供商都启用了主流主机提供商。我爱他们。

恕我直言,使用短标签的人经常忘记转义他们所呼应的内容。如果有一个默认转义的模板引擎就好了。我相信Rob A写了一个快速的hack来避免在Zend框架应用程序中的短标签。如果您喜欢短标签,因为它使PHP更容易阅读。那么Smarty是不是一个更好的选择呢?

{$myString|escape}

在我看来,这比

<?= htmlspecialchars($myString) ?> 

把< ?(不带尾随空格)到<?PHP(后面有一个空格):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\?(?!php|=|xml|mso| )/<\?php /g'

把< ?(后面有空格)到<?PHP(保留尾随空格):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\? /<\?php /g'

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

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

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

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

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

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

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

由于Zend Framework在默认的MVC配置中引入了“PHP作为模板语言”,短标签又回来了。我不明白争论的是什么,你一生中生产的大部分软件都将在你或你的公司控制的服务器上运行。只要你能始终如一,就不会有任何问题。

更新

在Magento做了大量的工作之后,它使用了长格式。因此,我改用了长形式的:

<?php and <?php echo

over

<? and <?=

为了确保互操作性,似乎只需要做少量的工作。