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

Eigener OAuth-Server in PHP Aufgrund des gestrigen Artikels über Instagram und OAuth bin ich schnell auf die Idee gekommen das es ja Quatsch wäre für eigene APIs zukünftig kein O...
Tutorial Amazon Web Services mit PHP – I ... Die Amazon Web Services sind recht nett, wenn man einfach und schnell Content auf seine eigenen Seiten bringen möchte. Dabei geht es noch nicht einmal...
PHP Code Snippets für komplexere Aufgaben Wieso das Rad neu erfinden? Große Teile einer Umsetzung bedeuten Copy&Paste - wer was anderes behauptet - naja - macht sich entweder zu viel Arbei...
Bessere Fehlermeldungen mit PHP Error PHP Fehlermeldungen tauchen an den unmöglichsten Stellen im Design auf, sind in keinster Weise irgendwie formatiert und vor allem muss es nicht unbedi...

2 Kommentare

Schreibe einen Kommentar