PHP开放标签“<?=”和“<?php”/“<?”有什么区别?
对不起,这个愚蠢的问题,但我跑遍了使用的代码:
<?=$MAP_OBJECT->printOnLoad();?>
<?=$MAP_OBJECT->printMap();?>
<?=$MAP_OBJECT->printSidebar();?>
有没有什么特别的<?=
over <?php
或者简单的<?
?
我们不应该讨论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 echo '<?xml version="1.0"?>'; ?>
。
否则,PHP将在<?xml
的xml
中窒息。
现在谈谈弃用的最后一句话:目前不推荐使用short_open_tags。 否则,手册将明确说明。 此外,拉斯姆斯·勒多夫,PHP的发明者,在关于这个问题的回信中写道“这是真的,short_open_tag的值为在PHP 6过时?”的内部邮件列表,有几个原因,不会删除在PHP 6项short_open_tags:
这是我们决定不在PHP 6中删除它们的原因之一。
它们是<?php echo .... ?>
简称,称为短标签 。 你应该避免使用它们,因为:
<?xml ... ?>
产生冲突 所以你不应该再使用它们,也请看看:
PHP短打开标签:方便快捷或短时间更改安全?
<?=
是一个很短的标签,几乎等同于:
<?php echo
从PHP 5.4开始,此语法始终可用,但在早期版本的PHP中,它需要启用short_open_tag
。 至于如何在堆栈溢出中搜索它,请尝试code:"<?="
。
上一篇: What is the difference between the PHP open tags “<?=” and “<?php”/“<?”?