PHP 5.4.5 hier auf. Ich versuche, ein Objekt aufzurufen, das als Mitglied eines anderen Objekts gespeichert ist. So (sehr grob)So rufen Sie die __invoke-Methode einer Membervariablen innerhalb einer Klasse
class A {
function __invoke() { ... }
}
class B {
private a = new A();
...
$this->a(); <-- runtime error here
}
Dies erzeugt natürlich einen Laufzeitfehler, weil es keine Methode namens a gibt. Aber wenn ich den Anruf so schreibe:
($this->a)();
dann bekomme ich einen Syntaxfehler.
Natürlich kann ich
$this->a->__invoke();
schreiben, aber das scheint unerträglich hässlich, und eher untergräbt den Punkt functors. Ich habe mich nur gefragt, ob es einen besseren (oder offiziellen) Weg gibt.
Dank Igor. Von den drei scheint die Zuordnung zur Variablen am klarsten zu sein, aber keine von ihnen ist sehr nett. Versteht jemand, warum die 'offensichtliche' Syntax $ this-> a() die __invoke-Methode des Members nicht finden kann - warum unterscheidet sich der Member-Zugriff grundlegend von der nackten Variablensyntax? –
Weil es mehrdeutig ist. '$ this-> a()' könnte entweder die Methode 'a' oder das Element' $ a' sein. In PHP sind diese beiden stark voneinander getrennt (im Gegensatz zu JS zum Beispiel). – igorw
Ah. Das macht Sinn. Vielen Dank. –