Frage

In PHP haben Sie den create_function () -Funktion, die eine eindeutige Namen Lambda-Funktion wie folgt erstellt:

$myFunction = create_function('$foo', 'return $foo;');
$myFunction('bar'); //Returns bar

Ist das wirklich besser (abgesehen davon, dass mehr leicht) dann nur tun:

do{
 $myFunction = 'createdFunction_'.rand();
}
while(function_exists($myFunction));
eval("function $myFunction(\$foo) { return \$foo; }");
$myFunction('bar'); //Returns bar

Ist create_function wirklich besser? (Abgesehen von der Tatsache, dass es leichter ist)

War es hilfreich?

Lösung

Auf meinem Verständnis der relevanten Dokumente [1], sie beide das gleiche tun, create_function () kommt nur für Sie mit einem einzigartigen Funktion Namen.

Um einige andere Kommentare zu dieser Frage befassen:

  

create_function kann eine Variablen zugewiesen werden, um die Funktion zugänglich zu anderen Teilen des Codes zu machen, während eval nur nützlich für den gegebenen Rahmen ist.

Es kann gut, dass eval () sein läuft im aktuellen Bereich, aber Funktionsdefinitionen Kommen Sie in den globalen Namensraum ohnehin entsorgt. [2] Also, wenn Sie eine Funktion definieren, wird es überall in Ihrem Programm zugänglich sein.

  

Mit eval () wird die globale Funktionsliste Krempel, create_function () nicht

create_function () gibt nur einen String mit dem Namen der neuen Funktion, [3] nicht einig spezieller Callback-Typ. So werden beide Techniken, um Ihren globalen Namensraum verschmutzen.

Also nein, abgesehen von create_function () ist einfacher, es scheint nicht besser als eval () zu sein.

Fußnoten:

[1] http://au2.php.net/manual /en/functions.user-defined.php ; http://au.php.net/create_function ; http://au.php.net/eval

[2] http://au2.php.net/manual /en/functions.user-defined.php

[3] http://au.php.net/create_function

Andere Tipps

eval () wird die globale Funktionsliste Krempel, create_function () wird nicht, abgesehen davon, dass es kein großer Unterschied. Jedoch , beide Methoden erfordern die Funktion Körper innerhalb eines PHP-String schreiben, die fehleranfällig ist und wenn Sie auf meinem Projekt arbeiten wäre, würde ich Sie bestellen nur eine Hilfsfunktion mit der normalen Syntax deklarieren.

Anonyme Funktionen in PHP sind so schlecht umgesetzt, dass der Code tatsächlich besser dran nicht mit ihnen. (Zum Glück wird dies in PHP 5.3 behoben werden).

Ich persönlich habe festgestellt, dass create_function () ist äußerst praktisch, wenn Arrays zu sortieren.

In der Tat, ich suchte nur die Bahn, und es scheint, dass die PHP-Dokumentation ein gutes Beispiel dafür hat.

http://us.php.net/create_function

Blättern Sie nach unten zu Beispiel # 3 anonyme Funktionen als Callback-Funktionen .

create_function kann einer Variablen zugewiesen werden, so dass die Funktion auf andere Teile des Codes zugänglich, während eval nur nützlich für den gegebenen Rahmen ist.

(abgesehen von der Tatsache, dass es leichter ist)

Ich verstehe nicht, wie Sie dies so leicht abtun können. Angesichts Ihre zwei Beispiele, die auf einem Blick einfacher zu verstehen ist? Create_function sagt Ihnen, was Sie erreichen möchten. Eval nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top