在使用call_user_func_array调用的方法中使用$ this

时间:2012-10-14 19:56:05

标签: php arrays oop

我有一个方法,简化如下:

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

2 个答案:

答案 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)