PHP中的"<?="是什么意思?

244
<?php

$a=1;

?>
<?=$a;?>

<?= 的确切含义是什么?


旁注:这在ASP.NET MVC视图中被广泛使用。 - Omar
2
https://dev59.com/ZkvSa4cB1Zd3GeqPawGT#1963912 - Mike B
20
请注意,分号“;”是多余的;正如答案所建议的那样,这个短标签会扩展为一个带有分号的echo语句,根据PHP文档 - not-just-yeti
8个回答

333
这是一个简写形式,等同于<?php echo $a; ?>
默认情况下启用,自5.4.0版本开始,不受php.ini设置影响。

3
它在php 7中是否可用? - zachdyer
12
请注意,最后的分号不是必需的。但如果因为某种原因需要返回到经典标签,一个简单的整个项目搜索和替换“<?=”为“<?php echo”不足以解决问题。无论如何,我希望今天你们没有在运行PHP < 5.6的生产服务器,因为这些版本已经不再得到维护(PHP支持的版本)。 - TwystO

62
这是一个简写形式,等同于这个表达式:
<?php echo $a; ?>

它们被称为短标签;请参见文档中的示例#1。


25

因为重复说明它的意思是echo没有什么价值,我想你会喜欢看看在PHP中它准确的意思:

Array
(
    [0] => Array
        (
            [0] => 368 // T_OPEN_TAG_WITH_ECHO
            [1] => <?=
            [2] => 1
        )
    [1] => Array
        (
            [0] => 309 // T_VARIABLE
            [1] => $a
            [2] => 1
        )
    [2] => ; // UNKNOWN (because it is optional (ignored))
    [3] => Array
        (
            [0] => 369 // T_CLOSE_TAG
            [1] => ?>
            [2] => 1
        )
)

您可以使用以下代码进行测试:

$tokens = token_get_all('<?=$a;?>');
print_r($tokens);
foreach($tokens as $token){
    echo token_name((int) $token[0]), PHP_EOL;
}

解析器令牌列表中,这是T_OPEN_TAG_WITH_ECHO所链接的内容


令牌未能告诉我更多细节。 - user198729

14

<?= $a ?><? echo $a; ?> 是等价的,只是前者是后者的简写形式,以方便使用。


8
<?=$a; ?>

是以下内容的缩写:

<?php echo $a; ?>

8
自 PHP 5.4.0 起,即使在 php.ini 中未设置 short_open_tag,<?= ?> 始终可用。
此外,自 PHP 7.0 起,ASP 标签:<%, %> 和脚本标签<script language="php"> 已从 PHP 中删除。

5

4
我希望它不会被弃用。虽然写 <? blah code ?> 是相当不必要的,容易与XHTML混淆,但是显然 <?= 不会。不幸的是,我不使用它,因为 short_open_tag 看起来越来越被禁用了。
更新:现在我又开始使用 <?= 了,因为它已经在 PHP 5.4.0 中默认启用。 详见http://php.net/manual/en/language.basic-syntax.phptags.php

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接