将闭包对象转换为数组


convert Closure object to array

我有以下PHP代码:

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

调用产生如下错误:

致命错误:不能使用闭包类型的对象作为数组

如何将闭包对象转换为数组?

我试过以下方法:

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) "" 
        } 
    } 
}

我能做什么?

您想获得一个具有回调参数的数组吗?如果你需要,你可以使用反射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);
}