5

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());

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

提取物不会发生这种情况

4

1 回答 1

1

文档有误或功能有误。老实说,我无法理解为什么 extract 需要通过引用传递一个数组,但是有人指出了 EXTR_REFS 提取类型标志。

查看我本地版本的 PHP 代码(5.3.2),我可以看到 for 的函数定义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 这可能是这种情况(这个常量仍然存在)。

于 2012-12-31T18:51:57.727 回答