PHP开放标签"<?="和"<?php"/"<?"之间有什么区别?

jos*_*inm 11 php syntax

很抱歉这个愚蠢的问题,但我遇到了使用的代码:

<?=$MAP_OBJECT->printOnLoad();?>
<?=$MAP_OBJECT->printMap();?>
<?=$MAP_OBJECT->printSidebar();?>
Run Code Online (Sandbox Code Playgroud)

关于<?=over <?php或just plain 有什么特别之处<?吗?

Sar*_*raz 18

它们是<?php echo .... ?>被称为短标签的简写.你应该避免使用它们,因为:

  • 它们似乎在某些服务器上被关闭了
  • 它们可以帮助您在安全方面遇到麻烦
  • 他们可能会像处理指令一样产生冲突 <?xml ... ?>

所以你永远不应该再使用它们,也看看:

PHP短开标记:方便的快捷方式还是短期安全性?

  • `short_open_tag` ini选项**不是**不推荐使用. (6认同)
  • @Sarfraz Ahmed:现在我很困惑,因为你是那个将问题标题和身体从`<?=`更改为`<?php =`的人,你为什么这样做?OP询问了`<?=`! (4认同)
  • @col.Shrapnel,@ Gumbo:我已在答案中提供了证据.你必须看到第47号幻灯片:http://www.slideshare.net/thinkphp/php-53-and-php-6-a-look-ahead (3认同)
  • @salathe:关于你的评论,请参阅:http://stackoverflow.com/questions/3008614/should-short-tags-be-avoided-as-much-as-possible/3008626#3008626 (2认同)
  • @col.弹片:我会*自然地和你结束这个*说你应该在那里提供你的评论,以便我和他一起得到清理.另外我不知道像Dorwand你是多么熟练的PHP,所以你的论点也取消了你对我的评论. (2认同)
  • 不,你错了.陈述任何陈述的人,应该带来积极的证据.除了一些无知的人之外,你没有任何证据.而且没有一个来自PHP团队的官方消息.我的证据就是没有这样一个词.这是逻辑.即使对你来说也很简单 (2认同)

Gum*_*mbo 15

我们应该讨论使用短开标签时的优缺点,而不是讨论是否弃用了short_open_tags:

好处

使用短开放标签<?连同<?=比较短,可能更容易比标准的开放标签写<?php<?php echo分别.在模板中直接使用PHP时非常方便.(这可能也是PHP 为控制结构提供替代语法的原因.)

缺点

需要特定配置

使用短打开标签时,您需要启用short_open_tags.如果您或您的网络托管服务提供商决定禁用short_open_tags,您的应用程序可能不再起作用,您可能会遇到一些严重的安全问题.因为如果禁用了short_open_tags,则只<?php识别标准开始标记,并将短开始标记内的所有内容视为纯文本.(另请参阅Sarfraz Ahmed的答案中引用的博客文章.)

如果您的目标是编写不仅适合您的应用程序,则此要求会使您的PHP应用程序不那么便携.这也是为什么许多人建议不要使用短开标签(包括PHP手册):

注意:在开发用于重新分发或在不受您控制的PHP服务器上部署的应用程序或库时,应避免使用短标记,因为目标服务器可能不支持短标记.对于便携式可再发行代码,请确保不要使用短标签.

从PHP 5.4 <?=开始,无论short_open_tags选项如何,它始终可用.<?另一方面,需要启用该选项.

与XML处理指令冲突

使用时,另一个问题是XML处理指令类似<?xml … ?>.当启用short_open_tags时,您不能直接在代码中使用它们,但需要使用PHP来输出它:

如果要将PHP与XML结合使用,可以禁用此选项以使用<?xml ?>内联.否则,您可以使用PHP打印它,例如:<?php echo '<?xml version="1.0"?>'; ?>.

否则PHP会扼杀xmlin <?xml.

现在关于弃用的最后几句话:目前不推荐使用short_open_tags.否则手册会明确说明.此外,PHP的发明者Rasmus Lerdorf 在内部邮件列表回答了关于"PHP 6中是否已经弃用了short_open_tag这个问题?"回复,其中有几个原因没有删除PHP 6 中的short_open_tags:

这是我们决定不在PHP 6中删除它们的原因之一.


Ry-*_*Ry- 12

<?= 是一个短标签,几乎相当于:

<?php echo 
Run Code Online (Sandbox Code Playgroud)

从PHP 5.4开始,这种语法始终可用,但在早期版本的PHP中,它需要short_open_tag启用.至于如何在Stack Overflow上搜索它,试试吧code:"<?=".

  • 另外,为了能够使用它,必须在php.ini文件中设置,因此在关闭此短标签的某些服务器上可能会遇到问题. (2认同)

der*_*ann 7

这是一个简写<?php echo $MAP_OBJECT->printOnLoad(); ?>.在制作基于PHP的模板和事物时,更简单的方法来编写它.

但要小心.我的理解(虽然我自己从未遇到过)是在一些服务器上可以禁用速记版本.