在PHP中,我經常進行大量的字符串操作。將我的代碼分割成多個函數是可以的,因爲如果像字符串這樣的基本類型是按值傳遞的,我會顯着影響性能。PHP中的原始數據類型是否通過引用傳遞?
1
A
回答
7
只有對象通過引用傳遞。
這並不意味着您可以通過更改引用來獲得性能提升--PHP使用寫時複製,因此只有在修改變量時纔會生成副本。
將代碼分割成函數不會減慢它的速度。 調用一個函數有一個小的開銷,但除非你在一個循環中調用了10,000個函數,否則它可能不是你需要擔心的。
2
對象通過引用傳遞。除非您明確使用pass-by-reference with the & operator,否則其他一切都按價值傳遞。
這就是說,PHP也使用copy-on-write來避免不必要的複製。
1
是的,原語是由值來傳遞除非顯式定義通過引用傳遞(通過在參數的前需使用符號&
)或用在參數的前方的符號調用該函數的函數。 (後者已棄用)
請參閱this part of the documentation瞭解更多信息。
編輯
另外,在PHP的「對象是通過引用傳遞」的說法是有點簡單化,雖然它往往可以在大多數情況被認爲是這樣的。這chapter of the documentation解釋了不同之處。
1
默認情況下,所有內容都按值傳遞。如果你想通過引用傳遞某些東西,你必須明確地聲明它。
1
通過引用傳遞實際上比在PHP中傳遞值慢。我找不到這個說法的正確引用;它位於PHP手冊的「參考」部分。
相關問題
- 1. 在JNI中通過引用傳遞原始數據類型
- 2. 爲什麼要在PHP中通過引用傳遞原始類型參數?
- 3. 通過原始HTTP傳遞POST數據
- 4. 通過包裝在原始類型的類中傳遞基本類型作爲通過引用
- 5. javascript中的原始數據類型和引用數據類型
- 6. 將原始數據類型的引用傳遞給ruby中的函數
- 7. 不通過引用傳遞簡單類型的原因?
- 8. 通過引用傳遞值類型
- 9. 通過引用傳遞父級PHP類
- 10. PHP:如何知道參數是否通過引用傳遞?
- 11. Java - 引用原始數據類型?
- 12. Python 3中的類是否通過引用傳遞?
- 13. 我是否正確傳遞參數並通過引用傳遞?
- 14. PHP通過引用傳遞?
- 15. 如何通過引用傳遞基元數據類型?
- 16. 將原始數據類型傳遞到函數參數
- 17. 是否可以通過csv2geojson.js中的特定屬性傳遞數據類型?
- 18. 語義原因傳遞通過引用
- 19. 通過方差索引原始數據
- 20. Java是通過值傳遞還是通過引用傳遞?
- 21. PHP中的對象是通過值還是引用傳遞的?
- 22. 是否通過引用傳遞了php資源?
- 23. 未設置通過引用傳遞,也取消原始值
- 24. 通過引用傳遞數據成員
- 25. 通過引用傳遞數據「推遲」
- 26. 通過引用在PHP中傳遞數據庫連接
- 27. PHP原始數據類型屬性
- 28. 通過ClassLoader使用原始類型
- 29. C++傳遞值與非原始類型?
- 30. 返回通過引用傳遞的參數是否安全?
對象不通過引用傳遞。對象是引用類型,但除非另行指定,否則它們將作爲函數參數傳遞。 – Joseph 2009-07-08 12:59:10