可能的重复项:
在 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 进行了相同的测试,性能差异几乎可以忽略不计。