PHP性能:追加vs前置字符串

时间:2010-11-25 13:22:24

标签: php performance string

哪个性能更高:($longstring . $longstring) . $longstring$longstring . ($longstring . $longstring)? PHP的串联运算符是左关联还是右关联?它的关联性是最优的,还是应该用括号覆盖它的相关性?

4 个答案:

答案 0 :(得分:2)

真的,真的没关系。差异最多只有几毫秒。

将其编写为最适合您的编码风格和未来可维护性。

答案 1 :(得分:0)

正如Pekka所说,这无关紧要,我认为没有任何严肃的基准。如果你真的想知道,你应该尝试一下并测量。

至于关联性,我认为最常见的连接函数是从左到右。

http://www.php.net/manual/en/language.operators.string.php

答案 2 :(得分:0)

这两者应该没有区别。两者首先为($ longstring。$ longstring)分配额外的2n字符串,然后为整个事件分配额外的3n字符串。 Parens让我很困惑,因为他们想要传达一些意义,但在这种情况下,他们只是因为你觉得它更快。如果两组都没有什么特别之处,那么$s1 . $s2 . $s3更可取。

出于性能原因对微小细节进行微观管理是浪费时间。正如Pekka所说,它在速度上给出了极小的差异。您可以花费相同的时间来寻找可以真正显着提高性能的内容。

编辑:如果字符串真的很长而且很多,并且正在减慢对真实的请求,那么你应该考虑传递它们而不创建单个字符串。保留它们的数组然后输出或存储它们而不连接。

答案 3 :(得分:0)

$x . $y . $z($x . $y) . $z

相同

然而,通过这两种方法都无法获得任何表现。就像:

// ($x . $y) . $ z
$tmp = $x . $y;
return $tmp . $z;

VS

// $x . ($y . $ z)
$tmp = $y . $z;
return $x . $tmp;

在这两种情况下,都会发生相同数量的连接。如果一种方法更快(但两者都不是),那么它将取决于$x$y$z的长度。 (也就是说,将一个短字符串附加到一个长字符串,或者将一个长字符串附加到一个短字符串是否更快,这是你要问的问题。如果没有测试,我会说差别是微不足道的。)

现在,这些不同:$x .= $y$x = $y . $x。第一个是单个ASSIGN_CONCAT追加操作,它可能比前置(CONCATASSIGN)快得多。请注意,$x = $x . $y虽然在功能上等同于$x .= $y,但也是两个操作。因此,这种附加方式与前置方式具有相同的性能差异(如果有的话)。