Вызов функции из члена класса в PHP - PullRequest
1 голос
/ 15 августа 2011

Скажите, у меня есть следующее:

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, используя тот же синтаксис, что и функции-члены объекта.

Так какой же синтаксис позволяет вам вызывать функцию, которая хранится в переменной-члене?

1 Ответ

1 голос
/ 15 августа 2011

Вам нужно использовать call_user_func:

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

ОБНОВЛЕНИЕ

Кристиан отмечает, что call_user_func очень медленно, и что это быстрее:

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