将Closure对象转换为数组

时间:2016-10-30 18:51:53

标签: php arrays

我有以下PHP代码:

function test($callback) {
    $parameter = func_get_args()[0]["parameter"]; 
    var_dump$parameter);
}

test(function($var, $var2) {});

调用会生成此错误:

  

致命错误:无法使用Closure类型的对象作为数组

如何将Closure对象转换为数组?

我尝试过以下事项:

function test($callback) {
    $parameter = func_get_args()[0];
    $parameter = json_decode(json_encode($parameter), true);
    var_dump($parameter);
}

输出:

array(0) {}

function test($callback) {
    $parameter = func_get_args()[0];
    $parameter = (array) $parameter;
    var_dump($parameter);
}

输出:

array(1) { 
    [0]=> object(Closure)#1 (1) { 
        ["parameter"]=> array(2) { 
             ["$var"]=> string(10) "" 
             ["$var2"]=> string(10) "" 
        } 
    } 
}

我该怎么办?

1 个答案:

答案 0 :(得分:1)

你想获得一个包含回调参数的数组吗? 如果您这样做,可以使用Reflection API

function test() {
    $callback = func_get_args()[0];
    $rf = new ReflectionFunction($callback);
    $params = array();
    foreach ($rf->getParameters() as $param) {
        $params[] = $param->getName();
    }
    var_dump($params);
}