【问题标题】:PHP String literals and compiler optimization [duplicate]PHP字符串文字和编译器优化[重复]
【发布时间】:2012-05-23 14:59:09
【问题描述】:

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

我想知道在定义字符串不包含变量时使用"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 是否足够聪明/优化到足以知道我 真的 的意思:

echo 'Greetings earthlings';

?

【问题讨论】:

  • 是的,但它是如此之小,它并不是真正的考虑因素。在网络上某处有一个差异基准。但您可以在不到一分钟的时间内完成您自己的操作。 phpbench.com

标签: php optimization php-opcode


【解决方案1】:

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 QED,这个答案应该与原始副本合并.. 非常好
【解决方案2】:

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

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

【讨论】:

  • +1,是的。感谢您的意见
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 2011-05-16
  • 2013-06-07
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多