Anonyme Funktionen in PHP – Späte Erkenntnis

Ich hätte Stein und Bein schwören können, dass anonyme Funktionen in PHP syntaktisch genauso definiert werden, wie in Java, JavaScript und Konsorten. Mein Freund und Kollege Hendrik machte mich aber darauf aufmerksam, dass dem gar nicht so ist…

Über den Sinn und Unsinn von anonymen Funktionen lässt sich streiten, ich persönlich finde sie eigentlich recht praktisch. So richtig kann man sie nur selten brauchen, z.B. bei array_filter– oder array_walk-Funktionen und die gehören sicherlich nicht zu den am häufig verwendesten Funktionen. Die Frage ist aber: „Warum soll ich für solche ‚Schleifenfunktion‘ eine einfache Sortierfunktion als systemweite bzw. ‚globale‘ Funktion deklarieren, wenn ich sie doch nie wieder bzw. nirgendwo anders brauche?“ Von daher finde ich die Verwendung von anonymen Funktionen schon in Ordnung.

So macht es z.B. JavaScript vor:

window.onload = function() {
    alert("Anonyme Funktion");
}

Kurz und einfach. Überträgt man das ganze nach PHP, dann rappelts aber ordentlich und der Interpreter meckert!

// FALSCH - Nicht nachmachen, Kinder!
$arr = array(1, 2, 3);

array_walk($arr, function() {
   echo "Anonyme Funktion";
   return true;
});

NÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄT! Falsch! Klappt nicht, knallt ordentlich, kaputt.

Richtig ist die Verwendung von der Funktion create_function(). Sieht dann so aus:

$arr = array(1, 2, 3);

array_walk($arr, create_function($param, 
    "echo \"Anonyme Funktion\";
    return true;"
));

Ich bin wieder ein Stück schlauer und konnte mich vom Irrglauben lösen. Ich weiß auch nicht, wie das passieren konnte. ;-)

War dieser Artikel hilfreich für Sie?
[Gesamt: 0 Durchschnitt: 0]

3 thoughts on “Anonyme Funktionen in PHP – Späte Erkenntnis

  1. Marco Kaiser sagt:

    Also erstma so anonym sind deine Funktionen dann doch nicht :-)

    echo create_function(“, ‚echo „hello world“;‘);

    und deine code Beispiel erzeugt einen Compile Error :) weil der erste parameter für array_walk eine variable sein muss.

    ‚Only variables can be passed by reference‘ .. :)

  2. Ronald sagt:

    Hallo Marco,

    warum die Funktion Deiner Meinung nach nicht anonym sein soll, verstehe ich nicht ganz, klär das bitte mal auf.

    Mit dem anderen hattest Du natürlich recht, das Array muss vorher erzeugt und dann übergeben werden.

  3. Abro sagt:

    Nya bestimmt auch spätestens wegen der internen verarbeitung, sieht ja schon nach einem workaround aus.

    wir warten auf php5.3 =)
    http://wiki.php.net/rfc/closures

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *