1

说我有以下内容:

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使用与调用对象的成员函数相同的语法来调用回调函数。

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

4

1 回答 1

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();
}
于 2011-08-14T20:56:25.023 回答