the*_*cat 5 php arrays extract
extract(some_function_that_returns_array());
工作良好.
但是在php.net上它说第一个参数必须是一个引用的变量:http://php.net/manual/en/function.extract.php.这是一个错误吗?
function foo(&$array){}
function lol(){ $arr = array(); return $arr; }
foo(lol());
Run Code Online (Sandbox Code Playgroud)
显示"严格标准:只有变量应通过引用传递给......"
提取物不会发生这种情况
要么文档有错误,要么函数有错误。老实说,我无法理解为什么 extract 需要通过引用传递数组,但有人指出了 EXTR_REFS 提取类型标志。
查看我的 PHP 代码的本地版本(5.3.2),我可以看到 的函数定义extract()没有指示通过引用传递。
function extract (array $var_array, $extract_type = null, $prefix = null)
Run Code Online (Sandbox Code Playgroud)
查看sort()定义确实显示通过引用传递:
function sort (array &$array, $sort_flags = null)
Run Code Online (Sandbox Code Playgroud)
这就是为什么我没有在 上看到严格错误extract(),但在 上看到它sort()。
我假设 php.net 上的文档已经过时或者完全错误。 extract()是一只老小狗...我不确定函数定义是否确实表明了这一天&$var_array。
另一种选择是函数定义在某些时候被搞乱了,并且文档正确地指示了它应该如何,基于 EXTR_REFS 的额外类型标志可能是这种情况(该常量仍然存在)。