1

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

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

例如,PHP 将尝试解析由"but not定义的字符串中的变量'

$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';

?

4

2 回答 2

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

不过,我会毫不犹豫地称其为重要。实际的现实世界性能差异很可能是微不足道的。

于 2012-05-16T04:28:45.363 回答
1

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

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

于 2012-05-16T04:20:01.377 回答