Übergeben Sie eine Instanz-Methode als argument in PHP

Möchte ich das erstellen einer Listener-Klasse

class Listener {
    var $listeners = array();

    public function add(callable $function) {
        $this->listeners[] = $function;
    }

    public function fire() {
        foreach($this->listeners as $function) {
            call_user_func($function);
        }
    }
}

class Foo {
    public function __construct($listener) {
        $listener->add($this->bar);
    }

    public function bar() {
        echo 'bar';
    }
}



$listener = new Listener();
$foo = new Foo($listener);

Aber dieser code schlägt fehl mit dieser Fehlermeldung:

Notice: Undefined property: Foo::$bar in index.php on line 18

Abfangbaren fatal error: Argument 1 passed to Listener::add() muss aufrufbar sein, null, gegeben, genannt, index.php in Zeile 18 und definiert index.php in Zeile 5

Was mache ich falsch?

Ich bin nicht wirklich ein Spezialist in oop, aber könnte es sein, im Zusammenhang mit der Tatsache, dass die listener nicht über ein Konstrukt Methode?

InformationsquelleAutor Gergely Fehérvári | 2012-11-24

Schreibe einen Kommentar