PHP: Closures

Mit Version 5.3 haben die Closures Einzug in PHP gehalten. Nur, was sind Closures und wie kann man sie verwenden?

Closures konservieren unter Verwendung des Schlüsselwortes „use“ zum Zeitpunkt ihrer Definition die übergebenen Variablen und die darin enthaltenen Werte. Der Inhalt dieser so übergebenen Variablen kann im weiteren Codeverlauf (fast) nicht mehr geändert werden. Das klingt komplizierter als es tatsächlich ist. Hierzu ein kleines Beispiel:

Wie zu erwarten war erhalten wir als Ergebniss 42. Wozu aber der ganze Aufwand?
Hierzu ein weiteres Beispiel:

Das Ergebniss lautet nicht 39 sondern ebenfalls 42. Zum Zeitpunkt der Erstellung des Closures wurde $a fest mit dem Wert 40 im Closure „eingeschweißt“. Eine erneute Wertzuweisung ist danach nicht mehr möglich.

Einem Closure kann auch mehr als eine Variable zugewiesen werden. Hierzu werden diese einfach bei der Definition kommasepariert hintereinander aufgeführt.

In der Einleitung schrieb ich, dass die Werte innerhalb eines Closures (fast) nicht mehr änderbar sind. Da einem Closure aber nicht nur Variablen, sondern auch Referenzen übergeben werden können, bietet sich über diesen Weg noch eine Möglichkeit die Daten nachträglich zu ändern.

In diesem Fall weißt $a also nicht mehr den Wert auf, der bei der Definition des Closures bestand, sondern den Wert, den die Variable $a an der aktuellen Stelle im Skript hat.