2012-12-31 19 views
5

extract(some_function_that_returns_array());extract()爲什麼使用函數?

工作正常。

但在php.net上它說第一個參數必須是引用變量:http://php.net/manual/en/function.extract.php。這是一個錯誤嗎?


所以

function foo(&$array){} 

function lol(){ $arr = array(); return $arr; } 

foo(lol()); 

顯示:

不以提取

+0

請考慮這個錯誤,並報告它。一個相關的錯誤可能是:https://bugs.php.net/bug.php?id=55222一個相關的問題可能是:http://stackoverflow.com/q/6726589/367456 – hakre

+0

以及我真的不在乎關於它,但它表明手冊不可信:P如果'死()'殺死我們而不是腳本? ( – thelolcat

+0

),簡單點吧,你不能總是相信文檔,無論信任在這裏順便說一句,我想這個小小的缺陷並不會殺了你,對吧?如果你不在乎,那麼請不要問 – hakre

回答

1

無論是文檔發生 「嚴格的標準,只有變量應該由...引用傳遞」錯誤或功能出錯。老實說,我不能以任何理由看到爲什麼提取需要通過引用傳遞數組,但有人指出EXTR_REFS提取類型標誌。我可以看到extract()的函數定義並不表示按引用傳遞。

function extract (array $var_array, $extract_type = null, $prefix = null) 

望着sort()定義並顯示通過引用傳遞:

function sort (array &$array, $sort_flags = null) 

這就是爲什麼我沒有得到extract()嚴格的錯誤,我看到它在sort()

我假設php.net上的文檔已經過時或者顯然是錯誤的。 extract()是一隻古老的小狗...我不確定如果在當天返回的功能定義實際上表示&$var_array或不。

另一種選擇是函數定義在某個時刻被搞砸了,並且文檔正確地指出了它應該是什麼,基於EXTR_REFS的額外類型標誌可能是這種情況(這個常量仍然存在)。

+1

這是不正確的。僅僅因爲呼叫時傳遞引用在5.3中被棄用並且在5.4中被刪除並不意味着你不能再通過引用傳遞變量。與OP的問題完全無關。 – igorw

+0

@igorw這是正確的。通過引用傳遞是通過函數的定義來實現的,而不是在調用函數時指定的。 – Ray

+1

這個答案與問題無關。 OP根本不會詢問通話時間。 – webbiedave

相關問題