PHP字符串文字和编译器优化

时间:2012-05-16 04:15:13

标签: php optimization php-opcode

  

可能重复:
  Is there a performance benefit single quote vs double quote in php?

我想知道在定义不包含变量的字符串时使用"时PHP代码是否会受到性能影响,与未执行额外解析的'相比。

例如,PHP将尝试解析"但不是'定义的字符串中的变量。

$myString = "Greetings earthlings!";
echo '$myString'; //literally outputs the string '$myString'
echo "$myString"; //literally outputs the string "Greetings earthlings"

所以我的问题是,我一直在编写这样的代码:

echo "Greetings earthlings";

我一直在浪费周期吗?或者PHP智能/优化足以知道我真的意味着:

echo 'Greetings earthlings';

2 个答案:

答案 0 :(得分:5)

VLD的一些工作告诉我两个程序都编译成相同的字节码(使用PHP 5.3):

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   ECHO                                                     'Hello+world'
   3     1    > RETURN                                                   1

结论:现代版本的PHP完全没有区别。没有任何。使用对你最好的方式。


echo "Hello $world"

之间存在差异
compiled vars:  !0 = $world
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   1     0  >   ADD_STRING                                       ~0      'Hello+'
         1      ADD_VAR                                          ~0      ~0, !0
         2      ECHO                                                     ~0
         3    > RETURN                                                   null

echo "Hello " . $world

compiled vars:  !0 = $world
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   1     0  >   CONCAT                                           ~0      'Hello+', !0
         1      ECHO                                                     ~0
         2    > RETURN                                                   null
但是,我会毫不犹豫地称之为重要。实际上,现实世界的性能差异很可能是微不足道的。

答案 1 :(得分:1)

可以运行基准来查看。我为PHP 4做过,发现字符串连接比嵌入变量更快(一个数量级?我记不清楚)。相比之下,双引号中的普通字符串只比单引号快一点。

但那是PHP 4 。我稍后为PHP 5 运行了相同的测试,性能差异几乎可以忽略不计。