Lambda Funktionen

dg87

Erfahrenes Mitglied
Guten Abend,

ich les ja gerade ein Design Pattern Buch und stoße gerade auf die Lambda Funktionen und frage mich eigentlich nach dem Sinn von dem.

Ich habe hier ein Beispiel
Code:
$sorter = function($a,$b)
{
	if(strlen($a) < strlen($b))
	{
		return -1;
	}
	if(strlen($a) > strlen($b))
	{
		return 1;
	}
	return 0;
};

$arr = array('Stephan','Gerd','Frank');
usort($arr,$sorter);

print_r($arr);

Warum ist das Array am Schluss so sortiert -> Gerd, Frank Stephan.

Ich habe gerade die usort() funktion im php manual gesehen und die erwartet ja eine eine Callback Funktion. Aber irgendwie will in mein Hirn nicht rein, wie das jetzt zu Stande kommt und warum man die braucht.

****
 
Der eigentliche Sinn von anonymen Funktionen ist, das zur Laufzeit quasi der Code umgebaut werden kann. Anhand einer if-Abfrage könnte $sorter durch eine andere Lambda-Funktion überschrieben werden und somit das Ergebnis verändert. Bspw. könnte $sorter statt aufsteigend absteigend sortieren.
 
Ah ok, das könnte ein gutes Bespiel sein, dass man anhand einer IF Abfrage dynamisch die Funktion zusammenbaut.
Aber mir ist oben das Bespiel nicht klar, warum die garde so sortiert, das Gerd am anfang ist.
Ich peils einfach nicht
 
Um das herauszufinden, schauen wir uns mal an, welchen Wert die Variablen $a und $b jeweils haben:
  1. $a = Gerd, $b = Stephan
  2. $a = Frank, $b = Gerd
  3. $a = Stephan, $b = Gerd
  4. $a = Frank, $b = Stephan
Beim ersten Aufruf stellt die Funktion fest, dass der Name Gerd kürzer ist als der Name Stephan. Es wird -1 zurückgegeben, was bedeutet, dass Gerd kleiner als Stephan ist. Beim zweiten Aufruf werden nun die Namen Frank und Gerd verglichen. Frank ist länger als Gerd, also wird 1 ausgegeben. Dritter Aufruf: Stephan ist länger als Gerd, also 1. Vierter Aufruf: Frank ist kürzer als Stephan, also -1. Jetzt weiß die Funktion also, dass Stephan länger ist als Frank und Frank länger ist als Gerd. Aufsteigend sortiert steht jetzt also da: Gerd, Frank, Stephan.
 

Neue Beiträge

Zurück