<! - ?php echo $ var之间是否存在速度差异? ? - >和<! - ?= $ var? - >?

时间:2009-03-19 16:18:12

标签: php syntax php-shorttags

这两个版本之间有什么速度差异吗?

<?php echo $var; ?>

<?=$var?>

你推荐哪一个,为什么?

10 个答案:

答案 0 :(得分:17)

性能差异微不足道。而且,使用APC,性能差异为零,null,nada。

<?=$var?> 需要激活短标记。短标记在XML中是有问题的,因为<?也是XML处理标记的标记。因此,如果您正在编写应该是可移植的代码,请使用长格式。

请参阅http://www.php.net/manual/en/ini.core.php

中的short_open_tag说明

答案 1 :(得分:7)

从技术上讲,解析器必须解析较长版本的每个字符,并且每次传输都会有更多字符。

如果您的网络服务器没有“预编译”(即:缓存标记化的PHP页面),那么性能会略有差异。这可能是微不足道的,除非你开始谈论数十亿次运行。

- 亚当

答案 2 :(得分:6)

表现明智,这是微不足道的。

正确使用说使用较长的一个,因为它更便携。亲身?我做的较短。

答案 3 :(得分:5)

在php 5.3短标签ASP风格&lt; %%&gt;支持将被弃用,请尽量避免这种情况并将代码重写为'<?php echo' format,因为您无法使用内联<?xml ?>

答案 4 :(得分:4)

不,他们是完全相同的。如果您喜欢打字,请使用<?php echo $var; ?>,否则只需使用<?=$var?>节省时间。

答案 5 :(得分:3)

我认为第二个需要将short_open_tag(在PHP.ini中)设置为true。

意味着某些网络服务器可能会关闭它。

答案 6 :(得分:3)

  

您推荐哪种

两者都没有,除非你真的想要允许HTML注入。 (99%的情况下,你没有。)

<?php echo htmlspecialchars($var); ?>

或者使用较短的名称定义一个回显(htmlspecialchars($ arg))的函数,以避免所有输入。

答案 7 :(得分:2)

速度差异取决于您输入9个额外字符的速度 它还可以提高代码的可读性,但这是值得商榷的。

如果你谈论执行速度没有明显的区别。

答案 8 :(得分:1)

不要试图用这些优化,它没用。相反,请停用allow_short_tags(因为加载XML文件时出现问题)并编写干净,可读且易于理解的代码。

即使可能存在轻微差异(肯定低于10%),也可以使用它进行优化。如果脚本很慢,请先查看循环。大多数情况下,通过优化程序流程而不是使用奇怪的语法,您可以赢得更多性能。

答案 9 :(得分:0)

这两行代码相同。

我要添加一个较晚的答案,因为还没有人证明这一点,但是答案很明确地不,没有性能差异,特别是因为完全没有差异 > PHP如何执行这两行代码。

在两种情况下,解释器都可以看到相同代码。解析器会产生完全相同的AST,因为<?=<?php echo基本相同。当您编写<?=<?php echo时,解释器运行的指令没有什么区别。

通过安装php-ast,您可以检查两行代码产生的AST。

鉴于这两种情况...

# CASE 1
<?php echo $i %>

# CASE 2
<?= $i ?>

两者的抽象语法树是相同

case 1
AST_STMT_LIST
    0: AST_ECHO
        expr: AST_VAR
            name: "i"
case 2
AST_STMT_LIST
    0: AST_ECHO
        expr: AST_VAR
            name: "i"

这意味着PHP 在运行时无法分辨两者之间的区别,别介意遇到某种性能差异。

产生此输出的代码如下,并使用util.php

<?php
require('util.php');

echo "case 1\n";
echo ast_dump(ast\parse_code('<?php echo $i ?>', $version=50));

echo "\n";

echo "case 2\n";
echo ast_dump(ast\parse_code('<?= $i ?>', $version=50));

echo "\n";

优化与此处无关。选择取决于个人喜好,尤其是由于<?=始终可用,与短标签无关,从未被弃用,也不打算从该语言中删除。