在PHP中提取func_get_args

时间:2015-09-21 19:05:42

标签: php

我有功能:

function a()
{
     b(extract(func_get_args(),EXTR_PREFIX_ALL));
}
function b()
{
    foreach(func_get_args()as$arg)
        echo"$arg\n";
}

我想打电话给以下人员:

a("Foo","Bar");

我想要以下结果:

Foo
Bar

var_dump(func_get_args());返回:

array(2) {
    [0]=> string(3) "Foo"
    [1]=> string(3) "Bar" 
}

var_dump(extract(func_get_args(),EXTR_PREFIX_ALL));返回NULL

我错过了什么?

2 个答案:

答案 0 :(得分:2)

extract()从数组中获取,并使用这些名称(及其值)创建变量。我不确定你为什么要在这里使用它。

正如您所看到的,当您致电a("Foo", "Bar")时,func_get_args()将为您提供这两个元素的数组。

如果在a()内,你做了:

foreach(func_get_args() as $arg){
    echo"$arg\n";
}

然后它会起作用。

如果要将这些参数传递给另一个函数,则可以执行以下操作:

function a(){
    call_user_func_array('b', func_get_args());
}

如果您使用的是PHP 5.6+,则可以使用... operator

function a(...$args){
    b(...$args);
    // Or you can do:
    // b(...func_get_args());
}

function b(...$args){
    foreach($args as $arg){
        echo"$arg\n";
    }
}

答案 1 :(得分:0)

你做不到。 extract接收一个关联数组,以便能够通过使用键作为名称和值作为值来声明当前作用域中的变量,func_get_args返回一个简单数组。

仔细检查后,您缺少前缀:

b(extract(func_get_args(),EXTR_PREFIX_ALL, "prefix"));