Lambda Funktionen in PHP 5.3

Das neue PHP wird über Lambda-Funktionen verfügen. Toll! Aber was ist das eigentlich? Nun ja, es ist in der Tat etwas schwer zu erklären, aber ich will es trotzdem versuchen. Lambda-Funktionen (in der Informatik auch anonyme Funktionen genannt) sind sehr plump ausgedrückt Funktionen, die als Funktions-Parameter eine sogenannte Callback-Funktion übergeben.

Am einfachsten lässt sich das Ganze an einer Klasse fest machen, die eine Liste von 1:n Büchern verwaltet. Diese Klasse muss natürlich auch eine Liste der in ihr enthaltenen Bücher zurückgeben können.  Dabei legen wir Wert darauf, dass diese Liste nach verschiedenen Kriterien sortiert werden kann! Also gibt es nun zwei Möglichkeiten: Entweder ich habe FÜR JEDE Möglichkeit der Sortierung eine eigene Funktion in der Klasse (z. B. SortierenNachAutor, SortierenNachPreis, …) oder eine einzelne Funktion, in der ich als Parameter die Sortierkriterien übergebe (z. B. sort(„autor“), sort(„preis“), …).

Habe ich damit alle möglichen Sortierkriterien abgedeckt? Nein! Zum einen ist davon auszugehen das ich die Bücher vielleicht auch einmal komplett anders sortieren möchte, was eine Anpassung der Klasse nach sich ziehen würde, oder Sortierkriterien kombinieren möchte (erst Autor, dann Preis), was mit der derzeitigen Klasse ebenfalls nicht funktionieren würde, und ebenfalls weitere Anpassungen nach sich zieht. In einer komplexen Anwendung wird somit ein Großteil der Arbeit in das Sortieren der Daten einfließen, mit der Gewissheit, dass nicht alle Fälle abgedeckt sein werden.

Geht man allerdings hin, und reduziert das Problem auf ein Minimum erhält man folgende Erkenntnis:

a)      Letztendlich werden immer nur 2 Bücher miteinander verglichen

b)      Ein Buch kann „größer“, „kleiner“ oder „gleich“ dem Buch sein, mit dem es verglichen wird

c)       Der einzige Unterschied im Programmcode ist der direkte Vergleich zweier Bücher

Entsprechend würde sich das Leben wesentlich vereinfachen, wenn ich zwar eine Sortier-Funktion hätte, aber die Sortierkriterien völlig frei und ad hoc definieren könnte. Und genau hier kommen die Lambda-Funktionen ins Spiel! Denn mit PHP5.3 können die Sortierkriterien einfach als Funktionsparameter übergeben werden:

1
2
3
4
5
   $buecher->sortieren(
   function ($buch1, $buch2)
   {
      return strcmp($buch1->titel, $buch2->title);
   });

Diese Funktion würde die Liste einfach nach Titel sortieren, will ich die Bücher nun aber nach Autoren sortieren, würde ich einfach den Aufruf der Funktion ändern, nicht aber die Funktion selbst:

1
2
3
4
5
   $buecher->sortieren(
   function ($buch1, $buch2)
   {
      return strcmp($buch1->autor, $buch2->autor);
   });

Hierbei kann das Sortierkriterium nun beliebig komplex werden, und ich brauche die eigentliche Bücher-Klasse nicht mehr zu ändern! Eine prima Arbeitserleichterung!

Ähnliche Beiträge

10 nützliche PHP Snippets PHP ist eine fast sinnvolle Programmiersprache bei der am Ende alles immer so endet, dass man die gleichen Aufgaben immer wieder erledigen muss. Insof...
Besseres Debugging in PHP Debugging in PHP ist das größte Arschloch von allen nicht schön. Wohl dem, der einigen Aufwand betrieben hat, um XDebug an den Start zu kriegen. Aber ...
Tutorial Amazon Web Services mit PHP – IV &#... Nachdem wir uns im letzten Teil des Tutorials mit dem Funktionscaching beschäftigt haben, besitzen wir nun alle notwendigen Werkzeuge, um Daten aus de...
Tutorial Amazon Web Services mit PHP – V ... Wie im letzten Teil bereits angekündigt, erstellen wir im letzten Teil des Tutorials ein komplett funktionsfähiges Beispiel, um ein Buch mittels ISBN ...

2 Antworten auf „Lambda Funktionen in PHP 5.3“

  1. Pingback: hype.yeebase.com

Schreibe einen Kommentar

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