我有一个方法,简化如下:
class Foo {
public function bar($id) {
// do stuff using $this, error occurs here
}
}
这样称呼它很有效:
$foo = new Foo();
$foo->bar(1);
但是,如果我使用call_user_func_array()
来调用它,就像这样:
call_user_func_array(array("Foo", "bar"), array('id' => 1));
哪个应相等,我收到以下错误:
致命错误:在
中不在对象上下文中时使用$ this
($this
未定义)
这是为什么?有什么我想念的吗?我该怎么做才能在调用方法中使用$this
?
答案 0 :(得分:14)
array("Foo", "bar")
等于Foo::bar()
,即静态方法 - 这是有道理的,因为$foo
无处使用,因此PHP 无法知道要使用哪个实例
您希望array($foo, "bar")
调用实例方法。
请参阅http://php.net/manual/en/language.types.callable.php以获取各种可用卡的列表。
您还需要将参数作为索引数组而不是关联数组传递,即array(1)
而不是array('id' => 1)
答案 1 :(得分:0)
您可以使用:
(new $className())->$methodName(...$arrayWithParams)