【发布时间】:2012-05-28 09:43:23
【问题描述】:
抱歉这个愚蠢的问题,但我遇到了使用的代码:
<?=$MAP_OBJECT->printOnLoad();?>
<?=$MAP_OBJECT->printMap();?>
<?=$MAP_OBJECT->printSidebar();?>
<?= 与<?php 相比有什么特别之处吗?或者只是简单的<??
【问题讨论】:
-
试图通过搜索功能注入一些代码?
抱歉这个愚蠢的问题,但我遇到了使用的代码:
<?=$MAP_OBJECT->printOnLoad();?>
<?=$MAP_OBJECT->printMap();?>
<?=$MAP_OBJECT->printSidebar();?>
<?= 与<?php 相比有什么特别之处吗?或者只是简单的<??
【问题讨论】:
它们是<?php echo .... ?> 的简写,称为short tags。您应该避免使用它们,因为:
<?xml ... ?> 等处理指令产生冲突
因此你不应该再使用它们,也看看:
PHP Short Open Tag: Convenient Shortcut or Short Changing Security?
【讨论】:
short_open_tag ini 选项不已弃用。
<?= 更改为 <?php=,您为什么要这样做? OP询问了<?=!
与其谈论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 processing instructions 时,如<?xml … ?>。启用 short_open_tags 后,您不能直接在代码中使用它们,而是需要使用 PHP 来输出:
如果您想将 PHP 与 XML 结合使用,您可以禁用此选项以使用
<?xml ?>内联。否则,您可以使用 PHP 打印它,例如:<?php echo '<?xml version="1.0"?>'; ?>。
否则 PHP 会阻塞 <?xml 中的 xml。
关于弃用的最后一句话:目前 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 中删除它们的原因之一。
【讨论】:
<?= 是一个短标签,几乎等同于:
<?php echo
从 PHP 5.4 开始,此语法始终可用,但在 PHP 的早期版本中,它需要启用 short_open_tag。至于如何在 Stack Overflow 上搜索,试试code:"<?="。
【讨论】:
short_tags 的一部分。希望人们将来不必担心:)
这是<?php echo $MAP_OBJECT->printOnLoad(); ?> 的简写。当您制作基于 PHP 的模板和东西时,编写它的方法更简单。
不过要小心。我的理解(虽然我自己从未遇到过)是速记版本可以在某些服务器上禁用。
【讨论】:
<?= 不是一回事。它实际上是 <? 然后是 = 。正如@derekerdmann 所提到的,这是一个不推荐的配置。
看看下面的内容:
【讨论】:
只是为了纠正所有这些误导性的答案:
短开放标签不会被删除或弃用。
【讨论】:
短标签内不能这样写。
<?=
$number = "5";
$sum = 15 + "5";
?>
因为它只会将第一个输出打印为 5。
在open标签里面你可以这样写。
<?php
echo $number ="5";
echo $sum = 15+"5";
?>
它将同时打印 5 和 20
一切都与语法有关。
【讨论】:
由于重复问题而添加此内容
aka shortags 是 php 的替代标签,但仅适用于启用它的服务器。
它允许你像这样写回声
但是不建议使用它们,并且建议在 php5.4+ 中删除或弃用它们以及注册全局变量、安全模式和魔术引号等。
因此,尽管您可能会使用它们,但不推荐使用它们。 1. 它们不可移植,因为服务器必须启用它们。 2. 它们可以很容易地导致意大利面条代码,因为您可以轻松地将 html 集成到您的文件中。 3. 与xml声明混合使用时必须使用特殊方法
然而,它们非常适合制作模板以及用于循环和条件检查的其他简写符号。
【讨论】: