Verwendung von $ this in einer anonymen Funktion in PHP vor 5.4.0
Dem PHP-Handbuch sagt
Es ist nicht möglich
$this
von der anonymen Funktion vor PHP
5.4.0
auf dem anonyme Funktionen Seite. Aber ich habe festgestellt, ich kann damit es funktioniert durch die Zuweisung $this
einer Variablen und übergeben Sie die variable zu einem use
- Anweisung bei der definition einer Funktion.
$CI = $this;
$callback = function () use ($CI) {
$CI->public_method();
};
Ist das eine gute Praxis?
Gibt es einen besseren Weg, um den Zugang $this
innerhalb einer anonymen Funktion mit PHP 5.3?
InformationsquelleAutor der Frage steampowered | 2011-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird es scheitern, wenn Sie versuchen, zu nennen, einer geschützten oder privaten Methode auf, weil, es verwendend, der Weg zählt, wie der Aufruf von außen. Es gibt keine Möglichkeit, dies zu umgehen, in 5.3 soweit ich weiß, aber kommt PHP 5.4, es wird wie erwartet funktionieren, out of the box:
Sogar noch mehr, werden Sie in der Lage zu ändern, was $this-Punkte, um zur Laufzeit für anonyme Funktionen (Schließung rebinding):
Effektiv, anonyme Funktionen haben bindTo () - Methodewo der erste parameter kann verwendet werden, um anzugeben, was $this Punkte zu, und der zweite parameter steuert, was soll die Sichtbarkeit der Ebene. Wenn Sie den zweiten parameter weglassen, wird die Sicht wie der Aufruf von "aussen", wie zB. nur öffentliche Eigenschaften zugegriffen werden kann. Auch notieren Sie den Weg, bindTo funktioniert, ist es nicht ändern Sie die ursprüngliche Funktion, es gibt eine neue.
InformationsquelleAutor der Antwort K. Norbert
Ist die normale Art, wie es gemacht wurde.
b.t.w, versuchen Sie, entfernen die
&
sollte es funktionieren, ohne diese als Objekte übergeben von ref irgendeiner Weise.InformationsquelleAutor der Antwort Itay Moav -Malimovka
Nicht immer darauf verlassen, PHP Objekte durch Verweis übergeben, wenn Sie bei der Zuordnung einer auf sich selbst, das Verhalten ist nicht das gleiche wie in den meisten OO-Sprachen, wo die original-Zeiger geändert wird.
deinem Beispiel:
werden sollte:
BEACHTEN Sie DIE REFERENZ "&" und " $CI zugewiesen werden soll, nach der endgültigen fordert Sie auf, die gemacht worden sind, wieder andere, die Sie haben könnten unvorhersehbare Ausgabe, PHP Zugriff auf eine Referenz ist nicht immer das gleiche wie der Zugriff auf die ursprünglichen Klasse - wenn das Sinn macht.
http://php.net/manual/en/language.references.pass.php
InformationsquelleAutor der Antwort Christof Coetzee
Dass scheint in Ordnung, wenn Ihr durch Verweis übergeben wird, es ist der richtige Weg, es zu tun. Wenn Ihr mit PHP 5 Sie brauchen nicht die
&
- symbol vor$this
da es immer als Verweis übergeben, unabhängig.InformationsquelleAutor der Antwort fire
Ist dies in Ordnung. Ich sollte denken, Sie könnten dies auch tun:
... seit Rendezvous mit Objekten wird immer kopieren Referenzen, nicht ganze Objekte.
InformationsquelleAutor der Antwort halfer