在PHP中从类成员调用函数


Invoking a function from a class member in PHP

假设我有以下内容:

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");

上面的代码会抛出以下错误:

致命错误:调用undefined方法C::f()

我猜这是因为我试图调用回调函数$this->f使用相同的语法调用对象的成员函数。

那么,允许您调用存储在成员变量中的函数的语法是什么?

您需要使用call_user_func:

public function invoke ($n) {
    call_user_func($this->f, $n);
}

更新

Christian指出call_user_func非常慢,而这个更快:

function my_call_user_func($f) {
    $f();
}