在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. 通過原始HTTP傳遞POST數據
- 2. 通過引用傳遞父級PHP類
- 3. PHP:如何知道參數是否通過引用傳遞?
- 4. 我是否正確傳遞參數並通過引用傳遞?
- 5. 如何通過引用傳遞基元數據類型?
- 6. 是否可以通過csv2geojson.js中的特定屬性傳遞數據類型?
- 7. 通過方差索引原始數據
- 8. Java是通過值傳遞還是通過引用傳遞?
- 9. PHP中的對象是通過值還是引用傳遞的?
- 10. 未設置通過引用傳遞,也取消原始值
- 11. 是否通過引用傳遞了php資源?
- 12. 通過引用傳遞數據成員
- 13. 通過引用在PHP中傳遞數據庫連接
- 14. 我可以將非原始數據類型傳遞給WebMethod嗎?
- 15. 通過引用傳遞的整型類型
- 16. 是否可以使用call_user_func_array()通過引用傳遞參數?
- 17. 通過層傳遞類型
- 18. LINQ表達式中的值是否通過引用傳遞?
- 19. 對象是否通過JavaScript中的引用或值傳遞?
- 20. WebSphere Liberty中是否存在通過引用設置的傳遞?
- 21. Struts 2原始類型的數據傳輸和類型轉換
- 22. numpy數組是否通過引用傳遞?
- 23. Javascript是否通過引用或值傳遞數組?
- 24. 在C++函數中傳遞原始數據類型的最佳做法
- 25. PHP通過引用傳遞/值 - 問題
- 26. 在類中通過引用傳遞變量?在php
- 27. .NET如何通過引用傳遞類?
- 28. C++類只能通過引用傳遞
- 29. 傳遞值或通過引用獲取基本數據類型會更好嗎?
- 30. 原始類型通過C++和CLI
對象不通過引用傳遞。對象是引用類型,但除非另行指定,否則它們將作爲函數參數傳遞。 – Joseph 2009-07-08 12:59:10