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

PHP字符串文本和编译器优化,php,optimization,php-opcode,Php,Optimization,Php Opcode,可能重复: 我想知道当定义不包含变量的字符串时使用“s时,与不执行额外解析的”相比,PHP代码的性能是否会受到影响 例如,PHP将尝试解析由“定义的字符串中的变量,而不是” $myString = "Greetings earthlings!"; echo '$myString'; //literally outputs the string '$myString' echo "$myString"; //literally outputs the string "Greetings eart

可能重复:

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

例如,PHP将尝试解析由
定义的字符串中的变量,而不是

$myString = "Greetings earthlings!";
echo '$myString'; //literally outputs the string '$myString'
echo "$myString"; //literally outputs the string "Greetings earthlings"
所以我的问题是,我一直在写这样的代码:

echo "Greetings earthlings";
我是不是在浪费时间?或者PHP是否足够智能/优化,以了解我的真正意思:


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


但这是针对PHP4的。后来我对PHP5运行了相同的测试,性能上的差异几乎可以忽略不计

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

但这是针对PHP4的。后来我对PHP5运行了相同的测试,性能上的差异几乎可以忽略不计

对的一点工作告诉我这两个程序编译为相同的字节码(使用PHP5.3):

结论:现代版本的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
compiled vars:  !0 = $world
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   1     0  >   CONCAT                                           ~0      'Hello+', !0
         1      ECHO                                                     ~0
         2    > RETURN                                                   null
不过,我不想说这有什么意义。实际的性能差异很可能是微不足道的。

一点工作告诉我这两个程序编译成相同的字节码(使用PHP5.3):

结论:现代版本的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
compiled vars:  !0 = $world
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   1     0  >   CONCAT                                           ~0      'Hello+', !0
         1      ECHO                                                     ~0
         2    > RETURN                                                   null

不过,我不想说这有什么意义。性能上的实际差异很可能是微不足道的。

是的,但它太小了,不值得考虑。网络上的某个地方有一个差异的基准。但你可以在不到一分钟的时间内完成自己的任务。是的,但是它太小了,这不是一个真正的考虑。网络上的某个地方有一个差异的基准。但你可以在不到一分钟的时间内完成自己的任务+1 QED,此答案应与原始副本合并。。非常好+1 QED,这个答案应该与原始副本合并。。非常好+1,没错。谢谢你的输入+1,真的。谢谢你的意见