说我有以下内容:
class C {
private $f;
public function __construct($f) {
$this->f = $f;
}
public function invoke ($n) {
$this->f($n); // <= error thrown here
}
}
$c = new C(function ($m) {
echo $m;
});
$c->invoke("hello");
以上引发了以下错误:
致命错误:调用未定义的方法C :: f()
我猜这是因为我试图使用调用对象成员函数的相同语法来调用回调函数$this->f
。
那么允许您调用存储在成员变量中的函数的语法是什么?
答案 0 :(得分:1)
您需要使用call_user_func
:
public function invoke ($n) {
call_user_func($this->f, $n);
}
Christian指出call_user_func
非常慢,而且速度更快:
function my_call_user_func($f) {
$f();
}