PHP手冊說你必須做sort($array)
。 $array
將通過引用傳遞,因此sort()
將修改$myArray
。
我只是想知道是否有任何問題或暗示,如果你這樣做sort(&$myArray)
。
PHP手冊說你必須做sort($array)
。 $array
將通過引用傳遞,因此sort()
將修改$myArray
。
我只是想知道是否有任何問題或暗示,如果你這樣做sort(&$myArray)
。
下面給出更詳細的解答:
不推薦使用傳遞引用的原因是漫反射。這主要是代碼清潔。其次,它通常被新手濫用,導致無監督的副作用。 (如果新手被誤用是造成棄用的一個很好的理由,那麼mysql_query
應該早已不復存在。)
第三,實際上當ZendVM不期望它參與傳遞參數時,會出現一些內部內存管理問題。 (Quercus和Project Zero不存在這樣的問題。)
5.4是否也會刪除foreach($ array as&$ val){}? –
@tandu:不,沒有受損。 – mario
簡短的答案是沒有區別。
長的答案是你應該不惜一切代價避免引用。他們是錯誤的主要來源,而且你真的不需要它們。有一些罕見的事件需要引用來解決問題,但它們之間很少且很遠。
之所以有很多引用,是因爲在PHP 5.0之前,沒有對象引用的概念。所以你需要通過引用傳遞所有對象(並通過引用返回它們)以獲得任何類型的OO功能(允許修改對象的方法等)。但自5.0(已有十年曆史)以來,這已不再需要。爲了理解它現在的工作原理,我建議閱讀this answer。
所以做的更容易維護和正確的用法:
sort($myArray);
感謝您的回答。我知道參考文獻涉及什麼。我正在爲Zend PHP認證進行培訓,我只是在尋找每一個細節。我知道每次都有可能時我必須避免通過引用。 調用sort(&$ myArray)以任何方式修改$ myArray以不同的方式通過調用sort($ myArray)來修改它? –
不,它在任何方面都沒有什麼不同... – ircmaxell
它會觸發'E_DEPRECATED'通知。 (儘管阻止一個函數的傳遞參考無論如何是沒有意義的。) – mario
可能不是......現在。在通話時間通過引用傳遞已被棄用。 –
已棄用:不推薦使用引用時間傳遞 –