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

PHP beschleunigen mit phpFastCache Je höher die Besucher-Zahlen einer Seite werden, desto mehr Probleme fängt man sich ein. In der Regel kommt man heutzutage auf die Idee, langsamen Web...
PHP Analyzer ist Open Source Ab einer gewissen Größe eines Quelltextes, oder ob einer gewissen Größe eines Teams das an einem Projekt arbeitet gibt es Probleme, bei deren Lösung a...
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...
Amazon Product Advertising API – Änderung de... Da mich Amazon inzwischen im spamverdächtigen Bereich mit E-Mail penetriert hier noch mal der Hinweis das ihr die Authentifizierung in euren Altanwend...

2 Kommentare

Schreibe einen Kommentar