2010-11-25 36 views
1

哪一個更高性能:($longstring . $longstring) . $longstring$longstring . ($longstring . $longstring)? PHP的串聯運算符是左關聯還是右關聯?其關聯性是否最優,還是應該用括號覆蓋它的關聯性?PHP性能:追加vs預先加字符串

+1

closevoting太過本地化了,因爲這會產生變化的情景如此狹窄和特殊,通常不適用於互聯網的全球受衆,可能包括OP。如果這在你的項目中很重要,不要使用PHP。 – Gordon 2010-11-25 13:30:28

+0

@Gordon我問這個問題不是因爲我想微觀優化,而是因爲我想知道PHP如何處理字符串連接。我並沒有試圖「有所作爲」,我試圖變得開明。 – ppalka 2010-11-25 13:37:00

+0

那麼你可能想從你的問題中刪除關於性能的部分,因爲在性能方面它在實踐中對於99 +%是微不足道的。 – Gordon 2010-11-25 13:39:51

回答

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,也是兩個操作。因此,這種追加風格會與預先計劃相同(如果有的話)。

2

真的,沒關係。最好的差別是幾毫秒。

把它寫成最適合你的編碼風格和未來的可維護性。

0

兩個應該是兩者之間沒有什麼區別。兩者首先爲($ longstring。$ longstring)分配一個額外的2n字符串,然後爲整個事物分配一個額外的3n字符串。 Parens混淆了我,因爲他們想傳達一些意思,但在這種情況下,他們只是在那裏,因爲你認爲它更快。如果兩組沒有什麼特別之處,那麼$s1 . $s2 . $s3更可取。由於性能原因對微小管理進行微觀管理是浪費時間。正如Pekka所說,它在速度上帶來了極其微小的差異。你可以花相同的時間尋找可以顯着提高性能的東西。

編輯:如果字符串真的很長很多,並且正在減慢對真實請求的速度,那麼您應該考慮傳遞它們而不創建單個字符串。保存它們的數組,然後輸出它們或將它們存儲而不用連接。