为什么extract()与函数一起工作?

时间:2012-12-31 18:46:41

标签: 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());

显示“严格标准:只应通过引用传递变量......”

提取物不会发生

1 个答案:

答案 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的额外类型标志,可能就是这种情况(这个常量仍然存在)。