哪一個更高性能:($longstring . $longstring) . $longstring
或$longstring . ($longstring . $longstring)
? PHP的串聯運算符是左關聯還是右關聯?其關聯性是否最優,還是應該用括號覆蓋它的關聯性?PHP性能:追加vs預先加字符串
回答
$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
,也是兩個操作。因此,這種追加風格會與預先計劃相同(如果有的話)。
真的,沒關係。最好的差別是幾毫秒。
把它寫成最適合你的編碼風格和未來的可維護性。
正如佩卡所說,這真的沒有關係,我不認爲有任何嚴肅的基準。你應該嘗試一下,並衡量你是否真的想知道。
至於相關性,我認爲最常見的concat函數是從左到右的。
兩個應該是兩者之間沒有什麼區別。兩者首先爲($ longstring。$ longstring)分配一個額外的2n字符串,然後爲整個事物分配一個額外的3n字符串。 Parens混淆了我,因爲他們想傳達一些意思,但在這種情況下,他們只是在那裏,因爲你認爲它更快。如果兩組沒有什麼特別之處,那麼$s1 . $s2 . $s3
更可取。由於性能原因對微小管理進行微觀管理是浪費時間。正如Pekka所說,它在速度上帶來了極其微小的差異。你可以花相同的時間尋找可以顯着提高性能的東西。
編輯:如果字符串真的很長很多,並且正在減慢對真實請求的速度,那麼您應該考慮傳遞它們而不創建單個字符串。保存它們的數組,然後輸出它們或將它們存儲而不用連接。
- 1. 追加和預先計算的值由在JSON字符串
- 2. 追加字符串
- 3. 字符串連接VS字符串生成器追加
- 4. 是否可以在JSESSIONID中追加/預先添加文本字符串?
- 5. SQL追加字符串
- 6. 刪除追加字符串
- 7. C字符串追加
- 8. 字符串追加LINQ
- 9. 追加在字符串
- 10. C字符串追加
- 11. jQuery的追加字符串
- 12. 追加到字符串?
- 13. 無法追加字符串
- 14. PHP字符串操作:追加HTML類將字符串
- 15. 延遲加載vs預先加載
- 16. MySQL加入數據右側已預先加上字符串
- 17. 預先在字符串中加下劃線的大寫字母
- 18. 預掛起/在列表中追加對字符串的
- 19. 用隨機字符串追加AJAX請求追加到URL
- 20. Android字符串內容加載性能
- 21. PHP strlen - 基於字符串長度追加數字
- 22. 用正則表達式預先加一個字符串?
- 23. 將字符串追加到UILabel文本?
- 24. 追加空格爲字符串
- 25. 追加自定義字符串只有
- 26. 如何在iPhone中追加字符串?
- 27. 追加字符串與視圖名稱
- 28. 如何JSON字符串追加在AngularJS
- 29. NSString drawAtPoint/drawInRect:追加「...」截斷字符串
- 30. C++追加字符串指針
closevoting太過本地化了,因爲這會產生變化的情景如此狹窄和特殊,通常不適用於互聯網的全球受衆,可能包括OP。如果這在你的項目中很重要,不要使用PHP。 – Gordon 2010-11-25 13:30:28
@Gordon我問這個問題不是因爲我想微觀優化,而是因爲我想知道PHP如何處理字符串連接。我並沒有試圖「有所作爲」,我試圖變得開明。 – ppalka 2010-11-25 13:37:00
那麼你可能想從你的問題中刪除關於性能的部分,因爲在性能方面它在實踐中對於99 +%是微不足道的。 – Gordon 2010-11-25 13:39:51