Question

En PHP, vous avez la fonction create_function () qui crée une fonction nommée lambda unique, comme ceci:

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

Est-ce réellement mieux (à part d'être plus facile) que de simplement faire:

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

Est-ce que create_function est vraiment mieux? (mis à part le fait que c'est plus facile)

Était-ce utile?

La solution

Si je comprends bien les documents pertinents, [1] ils font tous les deux la même chose, create_function () vous attribue simplement un nom de fonction unique.

Pour répondre à d’autres commentaires sur cette question:

  

create_function peut être affecté à une variable rendant la fonction accessible à d'autres parties de votre code, alors que eval n'est utile que pour l'étendue donnée.

Il se peut que eval () s’exécute dans la portée actuelle, mais les définitions de fonctions sont quand même vidées dans l’espace de noms global. [2] Ainsi, chaque fois que vous définissez une fonction, celle-ci sera accessible partout dans votre programme.

  

L'utilisation de eval () encombrera la liste de fonctions globale, mais pas create_function ()

create_function () renvoie uniquement une chaîne portant le nom de la nouvelle fonction, [3] pas un type de rappel spécial. Ainsi, les deux techniques pollueront votre espace de noms global.

Donc non, mis à part que create_function () est plus facile, cela ne semble pas être meilleur que eval ().

Notes de bas de page:

[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

Autres conseils

L'utilisation de eval () encombrera la liste des fonctions globales, pas celle de create_function (), à part cela, il n'y a pas de grande différence. Cependant , les deux méthodes nécessitent l'écriture du corps de la fonction dans une chaîne PHP source d'erreurs. Si vous travailliez sur mon projet, je vous ordonnerais de déclarer une fonction d'assistance à l'aide de la syntaxe normale.

Les fonctions anonymes en PHP sont si mal implémentées que votre code est mieux à même de les ne pas les utiliser. (Heureusement, cela sera corrigé dans PHP 5.3).

Personnellement, j’ai constaté que create_function () est extrêmement pratique lors du tri des tableaux.

En fait, je viens de chercher sur le Web et il semble que la documentation PHP en donne un bon exemple.

http://us.php.net/create_function

Faites défiler jusqu'à Exemple # 3 Utilisation de fonctions anonymes en tant que fonctions de rappel .

create_function peut être affecté à une variable rendant la fonction accessible à d'autres parties de votre code, alors que eval n'est utile que pour l'étendue donnée.

(mis à part le fait que c'est plus facile)

Je ne comprends pas comment vous pouvez écarter cela si facilement. Compte tenu de vos deux exemples, lequel est-il plus facile à comprendre d'un coup d'œil? Create_function vous indique ce que vous avez l'intention d'accomplir. Eval ne le fait pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top