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());
显示“严格标准:只应通过引用传递变量......”
提取物不会发生
答案 0 :(得分:1)
文档出错或函数出错。老实说,我不能出于任何原因看到为什么需要通过引用传递数据,但有人指出了EXTR_REFS提取类型标志。
查看我在PHP代码(5.3.2)的本地版本,我可以看到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的额外类型标志,可能就是这种情况(这个常量仍然存在)。