PHP的open标签“< ”之间有什么区别?=”和“< ?php”/"< ?“?

bmvo0sr5  于 2023-05-27  发布在  PHP
关注(0)|答案(8)|浏览(147)

很抱歉我问了一个愚蠢的问题,但是我遇到了这样的代码:

<?=$MAP_OBJECT->printOnLoad();?>
<?=$MAP_OBJECT->printMap();?>
<?=$MAP_OBJECT->printSidebar();?>

<?=相对于<?php有什么特别之处吗?或者只是普通的<?

pvabu6sv

pvabu6sv1#

它们是<?php echo .... ?>的简写,称为**short tags**。你应该避免使用它们,因为:

  • 它们似乎在某些服务器上被关闭了
  • 他们会在安全方面给你带来麻烦
  • 它们可能会与<?xml ... ?>等处理指令产生冲突

因此,你不应该再使用它们,也看看:
PHP Short Open Tag: Convenient Shortcut or Short Changing Security?

cmssoen2

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中删除它们的原因之一。

bsxbgnwa

bsxbgnwa3#

<?=是一个短标记,它几乎等同于:

<?php echo

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

9o685dep

9o685dep4#

这是<?php echo $MAP_OBJECT->printOnLoad(); ?>的简写。更简单的方法来写它,当你制作基于PHP的模板和东西。
不过,小心点。我的理解(虽然我自己从来没有遇到过)是,速记版本可以在一些服务器上禁用。

bkkx9g8r

bkkx9g8r5#

<?=不是一个东西。实际上是<?然后是=。正如@derekerdmann所提到的,这是一个不推荐的配置。
给予以下内容:

8cdiaqws

8cdiaqws6#

纠正这些错误的答案:
短的开放标签不会被删除或弃用。

zf2sa74q

zf2sa74q7#

在短标签中,你不能这样写。

<?=
$number = "5";
$sum = 15 + "5";
?>

因为它只会将第一个输出打印为5。
在open tag里面你可以这样写。

<?php
 echo $number ="5";
echo $sum = 15+"5";
?>

它将同时打印5和20
这都是关于语法的。

myzjeezk

myzjeezk8#

由于重复问题而添加此内容

<? ?>又名shortags是php的替代标签,但只在启用它的服务器上工作。
它允许你像这样写echo <?=$var
但是不建议使用它们,并且已经建议在php5.4+中删除或弃用它们沿着注册全局变量,安全模式和魔术引号等。
所以尽管你可能会使用它们,但不推荐它们。
1.它们是不可移植的,因为服务器必须启用它们。
1.它们可以很容易地导致意大利面条代码,因为你可以很容易地将html集成到你的文件中。
1.当将它们与xml声明混合使用时,必须使用特殊的方法
然而,它们非常适合制作模板沿着其他用于循环和条件检查的速记符号。

相关问题