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

Smarty 3.0 Beta 1 veröffentlicht Ich gebe zu das Smarty ein persönlicher Liebling von mir ist. Zum einen kann ich damit erreichen das mein PHP-Code keinen „Optimierungen“ von Designer...
Word, Excel & Powerpoint Dateien mit PHP erst... In 98% der Fälle besitzt der Kunde eine Excel-Datei, die irgendwie online soll. Normalerweise tauscht man die Daten dann als .CSV aus (insofern der Ku...
Tutorial Amazon Web Services mit PHP – II &#... Im vorherigen Teil haben wir zumindest schon einmal einen API-Key und eine Partner-ID besorgt, jetzt geht es ans Eingemachte. AWS sind ein Service, de...
Cookies sind ja so was von 2012 … Sagen wir mal so: die Intention von Cookies ist ganz nett, die Tatsache wie sie heute genutzt werden eher nicht. Ein Cookie ist immer an eine Domain g...

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.