另一个问题是当使用像<?xml … ?>这样的XML处理指令时。当 short_open_tags 被启用时,你不能直接在代码中使用它们,而是需要使用PHP来输出它: 如果您想将PHP与XML结合使用,可以禁用此选项以内联使用<?xml ?>。否则,可以使用PHP打印,例如:<?php echo '<?xml version="1.0"?>'; ?>。 否则PHP将在<?xml中的xml上阻塞。 最后,我想说的是关于deprecation的几句话:当前 short_open_tags 不建议使用。否则手册会明确说明这一点。此外,PHP的发明者Rasmus Lerdorf在reply on the question “Is it true that short_open_tag is deprecated in PHP 6?” on the internals mailing list中写道,有几个原因不应该在PHP 6中删除 short_open_tags: 这也是我们决定不在PHP 6中删除它们的原因之一。
8条答案
按热度按时间pvabu6sv1#
它们是
<?php echo .... ?>
的简写,称为**short tags**。你应该避免使用它们,因为:<?xml ... ?>
等处理指令产生冲突因此,你不应该再使用它们,也看看:
PHP Short Open Tag: Convenient Shortcut or Short Changing Security?
cmssoen22#
与其讨论short_open_tags是否被弃用,我们更应该讨论使用短开放标签的优点和缺点:
优点
与
<?=
沿着使用短的开始标记<?
比标准的开始标记<?php
和<?php echo
更短,可能更容易编写。当在模板中直接使用PHP时,这是非常方便的。(这可能也是PHP使用alternative syntax for control structures的原因。缺点
需要特定配置
当使用短打开标签时,您需要启用 short_open_tags。如果您或您的虚拟主机提供商决定禁用 short_open_tags,您的应用程序可能无法再工作,您可能会遇到一些严重的安全问题。因为如果 short_open_tags 被禁用,则仅识别标准的开始标记
<?php
,短开始标记中的所有内容都被视为纯文本。(另见Sarfraz Ahmed的回答中提到的blog post。如果您的目标是编写不适合您的应用程序,那么这个要求会使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将在
<?xml
中的xml
上阻塞。最后,我想说的是关于deprecation的几句话:当前 short_open_tags 不建议使用。否则手册会明确说明这一点。此外,PHP的发明者Rasmus Lerdorf在reply on the question “Is it true that short_open_tag is deprecated in PHP 6?” on the internals mailing list中写道,有几个原因不应该在PHP 6中删除 short_open_tags:
这也是我们决定不在PHP 6中删除它们的原因之一。
bsxbgnwa3#
<?=
是一个短标记,它几乎等同于:从PHP 5.4开始,这种语法始终可用,但在PHP的早期版本中,它需要启用
short_open_tag
。至于如何在Stack Overflow上搜索它,请尝试code:"<?="
。9o685dep4#
这是
<?php echo $MAP_OBJECT->printOnLoad(); ?>
的简写。更简单的方法来写它,当你制作基于PHP的模板和东西。不过,小心点。我的理解(虽然我自己从来没有遇到过)是,速记版本可以在一些服务器上禁用。
bkkx9g8r5#
<?=
不是一个东西。实际上是<?
然后是=
。正如@derekerdmann所提到的,这是一个不推荐的配置。给予以下内容:
8cdiaqws6#
纠正这些错误的答案:
短的开放标签不会被删除或弃用。
zf2sa74q7#
在短标签中,你不能这样写。
因为它只会将第一个输出打印为5。
在open tag里面你可以这样写。
它将同时打印5和20
这都是关于语法的。
myzjeezk8#
由于重复问题而添加此内容
<? ?>
又名shortags是php的替代标签,但只在启用它的服务器上工作。它允许你像这样写echo
<?=$var
但是不建议使用它们,并且已经建议在php5.4+中删除或弃用它们沿着注册全局变量,安全模式和魔术引号等。
所以尽管你可能会使用它们,但不推荐它们。
1.它们是不可移植的,因为服务器必须启用它们。
1.它们可以很容易地导致意大利面条代码,因为你可以很容易地将html集成到你的文件中。
1.当将它们与xml声明混合使用时,必须使用特殊的方法
然而,它们非常适合制作模板沿着其他用于循环和条件检查的速记符号。