我會一直困惑於是否通過引用函數創建通過/呼叫。如果有人能夠解釋我何時應該使用它以及一些實際的例子,那將是非常好的。什麼時候我們需要通過引用函數創建通過/呼叫
3
A
回答
3
在其他語言中引用(或指針)調用的一個常見原因是爲了節省空間 - 但PHP足夠聰明,可以實現寫入時複製,這些參數被聲明爲按值傳遞(副本) 。還有一些隱藏的語義怪異 - 儘管PHP5引入了總是通過引用傳遞對象的做法,但數組值始終作爲引用存儲,call_user_func()始終通過值調用 - 從不通過引用(因爲它本身是一個函數 - 不是構造)。
但這是對原始問題的補充。
一般而言,它總是將其代碼聲明爲傳值(複製),除非您在調用的功能返回後顯式地要求該值不同。原因是您應該知道被調用的功能如何更改您當前正在編寫的代碼的狀態。這些概念通常被稱爲孤立和關注的分離。
2
0
在php4中,它被用於大型變量。如果你在一個函數中傳遞了一個數組,那麼該數組就被複制用於該函數中,並使用大量的內存和cpu。解決方案是這樣的:
function foo(&$arr)
{
echo $arr['value'];
}
$arr = new array();
foo($arr);
這樣你只傳遞參考,鏈接到數組並保存內存和cpu。由於php5的每個對象和數組(不知道像int這樣的標量)是否通過內部引用傳遞,所以不需要自己做任何事情。
0
這是最好的,當你的函數總是返回傳遞給它同一個變量
$var = modify($var); function modify($var) { return $var.'ret'; }
如果你總是會返回傳遞變量的變量的修改版本,使用的參考是偉大的。
另外,當處理大的變量,特別是數組時,在可行的情況下通過引用是很好的。這有助於節省內存。
通常,我在處理數組時通過引用傳遞,因爲我通常將修改後的數組返回到原始數組。
相關問題
- 1. 呼叫時通過按引用
- 2. 我們什麼時候需要創建代理服務,什麼時候需要創建Rest Api?
- 3. 我們什麼時候需要在codeIgniter中使用base_url()函數?
- 4. JS創建從通過AJAX通過呼叫
- 5. 我們什麼時候需要和何時傳遞函數?
- 6. 呼叫通過「串」
- 7. 通過引用與QVector呼叫
- 8. Mongodb:我們什麼時候需要購物車過期?
- 9. 需要創建通過javascript
- 10. 通過名稱呼叫vs通過宏擴展呼叫
- 11. 我們什麼時候需要一個默認構造函數?
- 12. 我們什麼時候需要在Clojure中引用列表?
- 13. 什麼時候使用Server.Transfer通過PostBackURL?
- 14. 什麼時候通過NSURLConnection使用Restkit?
- 15. 需要通過引用Java
- 16. 我要創建通過CSS
- 17. Twilio Listening In - 通過修改實時呼叫創建會議
- 18. 爲什麼我們甚至需要通過HTTPS刷新令牌?
- 19. 爲什麼我們需要在ng-click中通過「$ event」?
- 20. 爲什麼我們需要通過密鑰哈希?
- 21. AS3:通過引用計數,我不需要爲GC刪除什麼引用?
- 22. 呼叫通過接口
- 23. 呼叫通過反射
- 24. JSP呼叫通過HREF
- 25. 呼叫通過反射
- 26. 通過AJAX呼叫PHP
- 27. 不推薦使用通過引用的呼叫時間?
- 28. 爲什麼有時候我不能通過使用$ .getJSON函數獲取數據?
- 29. 我們什麼時候需要「需要'rubygems'」?
- 30. 什麼時候需要引用document.getElementByID?
+ 1爲寫複製行,這是關於傳遞數據和內存中發生的事情的一個很好的觀點。 – RobertPitt 2011-03-23 11:36:13