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

アップデート

Christiancall_user_funcは、これは非常に遅く、これは速いと指摘しています。

function my_call_user_func($f) {
    $f();
}
于 2011-08-14T20:56:25.023 に答える