PHP:_call中定义的方法,使用call_user_func_array

时间:2017-05-22 14:50:02

标签: php

我对此问题提出了类似的问题:PHP can I call unexistent function with call_user_func

我需要调用一个方法定义宽度__call,但我不知道要传递多少参数。所以我正在使用它:

call_user_func_array(array($object, $method_name), $arguments);

但它不起作用。 实际上,这有效:

$object->$method_name();

但是我不知道如何通过call_user_func_array的其他方式传递参数...

我想要的是:

$object->$method_name($arguments[0], $arguments[1], $arguments[2] /*,... until no more args*/);

一个想法? 谢谢

1 个答案:

答案 0 :(得分:1)

这是完全可能的。我不知道你的代码,但这是一个快速测试,我把它放在一起以确保它有效:

class Foo {
    function _bar($arg1, $arg2) {
        print_r(func_get_args());
    }

    function __call($name, $args) {
        call_user_func_array([$this, '_'.$name], $args);
    }
}

$foo = new Foo();
$func = 'bar';

call_user_func_array([$foo, $func], ['1', '2']);

// Array
// (
//     [0] => 1
//     [1] => 2
// )

这会尝试调用不存在的函数Foo::bar(),因此它会在Foo::__call()中结束,然后调用Foo::_bar()