© saicle/Shutterstock.com
Einführung in die Verwendung von anonymen Funktionen in PHP

Einführung in die Verwendung von anonymen Funktionen in PHP


Anonyme Funktionen gehören inzwischen in vielen Programmiersprachen zum regulären Funktionsumfang. Neben funktionalen Programmiersprachen, wie Scheme, Scala, Haskell, Clojure und auch JavaScript, setzen vermehrt auch die klassischen Sprachen wie Ada, Python, Ruby oder C# auf die Eleganz und Einfachheit von funktionalen Aspekten in der Sprache. Auch PHP ist mit der Version 5.3 auf diesen Zug aufgesprungen. Der folgende Artikel soll das Konzept der anonymen Funktionen in PHP näher beleuchten und Einsatzmöglichkeiten aufzeigen.

Im Zusammenhang mit anonymen Funktionen tauchen in der Literatur immer wieder auch die Begriffe Clo­sure oder Lambda-Funktion auf. Im Kasten „Anonyme Funktion, Closure oder Lambda-Funktion?“ werden die drei Begriffe theoretisch erläutert und voneinander abgegrenzt. Wie aber sieht das in der Realität aus? Hierzu sehen wir uns ein Beispiel aus JavaScript an – einfach deshalb, weil die meisten Entwickler, die schon einmal irgendetwas in JavaScript entwickelt haben, fast zwangsläufig über derartige Konstrukte, die anonyme Funktionen und Closures in Aktion zeigen, gestolpert sind:

var a = 1, f = function(b) { a += b; return a; }; console.log(f(2)); // 3 console.log(a); // 3

Der vorige Code zeigt an einem einfachen Beispiel sehr gut das Grundkonzept hinter anonymen Funktionen und das Closure-Verhalten in JavaScript. Die Funktion f(b) hat keinen eigenen Namen – f ist lediglich die Variable, der die Funktion zugewiesen wurde, um überhaupt noch Zugriff auf die Funktion zu erhalten. Die Funktion f(b) lässt sich also nur aufrufen, wenn eine Referenz auf die Variable f zur Verfügung steht. Anonyme Funktionen, bzw. alle Funktionen in JavaScript, verhalten sich daher nicht anders als andere Typen. Man spricht hier auch davon, dass Funktionen „first class citizens“ sind. Den Closure-Aspekt kann man an der Variable a erkennen. Obwohl a nicht im Kontext von f(b) definiert wurde, kann aus f(b) auf a zugegriffen werden. Bei der Funktionserstellung wird also der Erstellungskontext gespeichert und steht zur Ausführungszeit von f(b) noch zur Verfügung (auch dann, wenn der Erstellungskontext gar nicht mehr existieren sollte, weil z. B. eine Funktion bereits wieder verlassen wurde). Die anonyme Funktion f(b) umschließt („to enclose“), speichert und erhält daher ihren Erstellungskontext. Dass im obigen Beispiel auch noch a aus f(b) heraus modifiziert werden kann, liegt daran, dass JavaScript grundsätzlich nur Referenztypen kennt.

In PHP können ab der Version...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang