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

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

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

<?=

比打字方便多了

<?php echo 

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


当前回答

如果您确定服务器将支持短标记,并且您的开发人员能够理解它,那么使用短标记是可以接受的。 许多服务器不支持它,许多开发人员在看过一次之后就会理解它。 我使用完整的标记来确保可移植性,因为它真的没有那么糟糕。

说了这么多,我的一个朋友说,为了支持其他标准化的asp样式标签,比如<%而不是<?,这是php.ini中称为asp_tags的设置。他的理由如下:

... 随意的约定应该是 标准化。也就是说,任何时候我们都可以 面对一系列的可能性 都是等价的,比如什么 奇怪的标点符号我们的编程 应该用语言来界定 我们应该选择一个标准 坚持下去。这样我们 减少所有人的学习曲线 语言(或者其他的东西 公约属于)。

听起来不错,但我不认为我们所有人都能在这件事上保持一致。与此同时,我将坚持使用完整的<?php。

其他回答

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

更新

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

<?php and <?php echo

over

<? and <?=

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

恕我直言,使用短标签的人经常忘记转义他们所呼应的内容。如果有一个默认转义的模板引擎就好了。我相信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'

如果你关心XSS,那么你应该使用<?= htmlspecialchars(…)?>大多数情况下,所以短标记不会有很大区别。

即使你将echo htmlspecialchars()缩短为h(),它仍然是一个问题,你必须记住几乎每次都要添加它(并试图跟踪哪些数据是预先转义的,这是不可转义的,但无害只会使错误更容易发生)。

我使用默认情况下安全的模板引擎,并写入<?PHP标签。

一种稍有不同的情况是在开发CodeIgniter应用程序时。CodeIgniter似乎在模板/视图中使用PHP时使用短标签,否则在模型和控制器中它总是使用长标签。这并不是框架中的硬性规则,但在大多数情况下,框架和许多来自其他用途的源代码都遵循这一约定。

我的意见?如果您从未打算在其他地方运行这些代码,那么如果您愿意,可以使用它们。当我意识到这是一个愚蠢的想法时,我宁愿不做大量的搜索和替换。