我可以提取函数返回值吗?

时间:2011-11-20 14:47:45

标签: php function variables extract

我注意到在PHP中extract(some_function());的工作方式如下:

$stuff = some_function();
extract($stuff);

但是在PHP的文档中,extract函数参数前面有&个东西,据我所知,这意味着你必须将一个变量传递给它。

3 个答案:

答案 0 :(得分:4)

如果文档是正确的,这将产生严格的标准信息:

  

PHP严格标准:只应通过引用传递变量

所以我认为你刚刚在文档中发现了一个错误。祝贺。

修改

如果您将EXTR_REFS用作第二个参数,它仍然不会抱怨:

~❯ php -a
Interactive shell

php > function a(){return array('pwet'=> 42);}
php > extract(a(), EXTR_REFS);
php > echo $pwet;
42

这很奇怪,因为在函数内定义的引用变量对我来说并没有多大意义。我认为&可能是因为此选项而引入的,但仅出现在文档中,并且未在代码中强制执行。

修改

我似乎是对的,我在ext/standard/array.c(分支机构5.3和5.4)中找到了这条评论:

/* var_array is passed by ref for the needs of EXTR_REFS (needs to
 * work on the original array to create refs to its members)
 * simulate pass_by_value if EXTR_REFS is not used */

答案 1 :(得分:1)

&符号通过引用传递变量,这样当它在函数中使用时,您正在操作原始对象 - 而不是具有相同值的新变量。文档告诉您,如果将变量传递给提取函数,则原始对象可以通过该函数以某种方式更新。

所以,答案是肯定的,你需要将变量传递给该函数。

答案 2 :(得分:1)

$var_array函数的extract参数的原因是通过引用传递(最有可能)来自旧版PHP的保留。较新的版本通过引用自动传递数组。

extract函数根据(可能很大的)数组的内容创建变量列表,不建议按值传递该类型的数据。

简而言之,将数组分配给变量并以这种方式传递。