Eine Instanzmethode als Argument in PHP übergeben

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?

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

Schreibe einen Kommentar