Lambda-Funktionen in PHP

Mit dem PHP 5.3 RC1-Release kam zum ersten Mal in der Entwicklung von PHP das Konzept der Lambda-Funktionen in eine PHP-Distribution. Diese bieten bessere Möglichkeiten für callbacks. Jedoch ist noch wenigen Entwicklern klar, welch ein Potential in solchen Funktionen steckt. Daher werde ich jetzt erklären, was es damit auf sich hat.

Einige Funktionen in PHP sind darauf ausgelegt, Funktionen als „Postfilter“ zu verwenden, um die endgültige Ausgabe zu erzeugen. Ein Beispiel ist die Funktion preg_replace_callback(), die als Ersetzungsparameter einen Funktionsnamen in Releasen, die älter als PHP 5.3 sind, erwartet. Dort gab man entweder ein Callback-Array der Funktion mit oder erzeugte immer beim Aufruf eine fast-anonyme Funktion mit der Funktion create_function().

Da diese Funktion jedoch im aktuellen Namensraum immer eine vollständige Benutzerfunktion erzeugte, suchte man nach neuen Lösungen; man kam auf die Lambda-Funktionen. Lambda-Funktionen in PHP werden wie normale Funktionen deklariert, mit der Ausnahme, dass Sie in Variablen gespeichert werden können und keinen Namen tragen. Das kann man am besten mit Code demonstrieren:

$funktion = function () {
return true;
}

Beim Aufruf dieser Funktion mit $funktion() wird der Wert true zurückgegeben. Dementsprechend kann man die Funktion auch für preg_replace_callback verwenden, indem man folgendes schreibt:

$funktion = function ($matches) {
return $matches[0]."_".$matches[1];
}
echo preg_match_callback("/([a-z]*)[0-9]+\-[75]$/i", $funktion, "hallo565-7"); // hallo565-7_hallo

Intern wird eine anonyme Funktion ab PHP 5.3 auch als Objekt gespeichert. Dieses Objekt definiert eine spezielle magische Methode invoke(), die es erlaubt, ein Objekt folgendermaßen aufzurufen: $object($parameter1, $parameter2, …)

1 Star2 Stars3 Stars4 Stars5 Stars (1 Stimme, durchschnittlich 1,00 / 5)
Loading...


2 Kommentare zu “Lambda-Funktionen in PHP”

  1. Wichtige Berichtigung: Im letzten Codebeispiel bitte preg_replace_callback statt pres_match_callback verwenden!

  2. […] Meiner Meinung nach eine der nützlichsten Neuerungen. Was genau das ist, hat Fritz schon in einem Artikel […]

Hinterlasse einen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

»Informationen zum Artikel

Autor: Fritz
Datum: 20.05.2009
Zeit: 20:52 Uhr
Kategorien: Wissenswertes
Gelesen: 7790x heute: 3x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta