哪个性能更高:($longstring . $longstring) . $longstring
或$longstring . ($longstring . $longstring)
? PHP的串联运算符是左关联还是右关联?它的关联性是最优的,还是应该用括号覆盖它的相关性?
答案 0 :(得分:2)
真的,真的没关系。差异最多只有几毫秒。
将其编写为最适合您的编码风格和未来可维护性。
答案 1 :(得分:0)
正如Pekka所说,这无关紧要,我认为没有任何严肃的基准。如果你真的想知道,你应该尝试一下并测量。
至于关联性,我认为最常见的连接函数是从左到右。
答案 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
追加操作,它可能比前置(CONCAT
,ASSIGN
)快得多。请注意,$x = $x . $y
虽然在功能上等同于$x .= $y
,但也是两个操作。因此,这种附加方式与前置方式具有相同的性能差异(如果有的话)。