Anonyme FunktionenAnonyme Funktionen, auch bekannt als Closures, ermöglichen es Funktionen ohne Funktionsnamen zu schreiben. Sie sind am wertvollsten als Werte von Callback-Parametern, haben aber noch viele andere Verwendungsmöglichkeiten. Anonyme Funktionen werden unter Verwendung der Closure-Klasse implementiert. Beispiel #1 Beispiel für eine anonyme Funktion
<?phpClosures können auch als Werte von Variablen verwendet werden; PHP konvertiert solche Ausdrücke automatisch in Instanzen der internen Klasse Closure. Die Zuweisung einer Closure an eine Variable verwendet die selbe Syntax wie andere Zuweisungen, einschließlich des abschließenden Semikolon: Beispiel #2 Beispiel für die Zuweisung einer anonymen Funktion
<?phpClosures können ebenfalls Variablen aus dem Eltern-Gültigkeitsbereich erben. Jede solche Variable muss an das use-Sprachkonstrukt übergeben werden. Beispiel #3 Erben von Variablen aus dem Eltern-Scope
<?phpDas oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie: Notice: Undefined variable: message in /example.php on line 6 NULL string(5) "hallo" string(5) "hallo" string(5) "hallo" string(4) "welt" string(10) "hallo welt" Das Erben von Variablen aus dem Eltern-Gültigkeitsbereich ist nicht das gleiche wie die Verwendung von globalen Variablen. Globale Variablen existieren im globalen Gültigkeitsbereich, der immer der gleiche ist, unabhängig davon welche Funktion ausgeführt wird. Der Eltern-Gültigkeitsbereich einer Closure ist die Funktion, in der die Closure deklariert wurde (nicht notwendigerweise die Funktion, aus der sie aufgerufen wurde). Betrachten Sie das folgende Beispiel: Beispiel #4 Closures und Gültigkeitsbereiche
<?phpBeispiel #5 Automatisches Binden von $this
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe mit PHP 5.3: Notice: Undefined variable: this in script.php on line 8 NULL Wird ab PHP 5.4.0 eine anonyme Funktion im Kontext einer Klasse deklariert, so wird diese Klasse automatisch an jene gebunden, was $this innerhalb des Geltungbereichs verfügbar macht. Ist diese automatische Bindung der aktuellen Klasse nicht erwünscht, dann können statt dessen statische anonyme Funktionen verwendet werden. Statische anonyme FunktionenAb PHP 5.4 können anonyme Funktionen statisch deklariert werden. Dies verhindert, dass automatisch die aktuelle Klasse an sie gebunden wird. Objekte können zur Laufzeit ebenfalls nicht an sie gebunden werden.
Beispiel #6 Versuch der Verwendung von $this innerhalb einer statischen anonymen Funktion
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Notice: Undefined variable: this in %s on line %d NULL
Beispiel #7 Versuch ein Objekt an eine statische anonyme Funktion zu binden
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Warning: Cannot bind an instance to a static closure in /in/sLLS9 on line 5 Changelog
Anmerkungen
|