Lieber dedlfix,
Unter PHP gibt es keine Möglichkeit einer Funktionsreferenz. Man muss deren Namen als String angeben.
Ich mag mich täuschen, aber seit PHP5.3 ist das durchaus möglich! Dort kannst Du "anonyme" Funktionen definieren und in Variablen speichern:
$f = function () { return 42; };
$f(); // 42
Das ist insbesondere nützlich, wenn Du Sortierfunktionen mit Callback nutzen möchtest:
$last_name_first = function ($a, $b) {
if ($a['last_name'] != $b['last_name']) {
return strnatcasecmp($a['last_name'], $b['last_name']);
}
return strnatcasecmp($a['first_name'], $b['first_name']);
};
usort($member_list, $last_name_first);
Wenn man die Sortierung nur einmal benötigt, darf man das auch gleich so notieren:
usort($member_list, function ($a, $b) {
if ($a['last_name'] != $b['last_name']) {
return strnatcasecmp($a['last_name'], $b['last_name']);
}
return strnatcasecmp($a['first_name'], $b['first_name']);
});
Das empfinde ich als großen Mist, wenn Strings eine code-ähnliche Bedeutung haben, also Magic Strings sind. Man weiß manchmal nicht, wenn zwei Strings zufällig oder unachtsamerweise denselben Wert haben, ob sie dann auch dieselbe Bedeutung haben. Das Dilemma entsteht nicht, wenn man richtige Code-Elemente verwendet. Die lassen sich eindeutig über den gesamten Code verfolgen, im Gegensatz zu Strings.
Wahrscheinlich hat man damals genau deswegen die anonymen Funktionen eingeführt. Die gibt es sogar mit Closures:
$a = 2;
$f = function ($x) use ($a) {
return $x/$a;
}
$f(42); // 21
Liebe Grüße,
Felix Riesterer.