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


PHP String literals and compiler optimization

可能的重复项:
在 php 中,单引号与双引号是否有性能优势?

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

例如,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';

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

不过,我不愿称其为重要。实际在现实世界中的表现差异很可能是微不足道的。

可以运行基准测试来查看。我为 PHP 4 做了,发现做字符串连接要快得多(一个数量级?我不记得确切了(比嵌入式变量。相比之下,双引号中的纯字符串仅比单引号略快。

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