我对此问题提出了类似的问题: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*/);
一个想法? 谢谢
答案 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()
。