Pregunta

En PHP, tiene la función create_function () que crea una función lambda denominada única como esta:

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

¿Es esto realmente mejor (aparte de ser más fácil) que simplemente haciendo:

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

¿Es create_function realmente mejor? (aparte del hecho de que es más fácil)

¿Fue útil?

Solución

Según mi comprensión de los documentos relevantes, [1] ambos hacen lo mismo, create_function () solo presenta un nombre de función único para ti.

Para abordar algunos otros comentarios sobre esta pregunta:

  

create_function puede asignarse a una variable que hace que la función sea accesible a otras partes de su código, mientras que eval solo es útil para el alcance dado.

Puede ser que eval () se ejecute en el ámbito actual, pero las definiciones de funciones se vuelcan en el espacio de nombres global de todos modos. Por lo tanto, cuando defina una función, estará accesible en cualquier otro lugar de su programa.

  

El uso de eval () saturará la lista de funciones global, create_function () no

create_function () solo devuelve una cadena con el nombre de la nueva función, [3] no es un tipo de devolución de llamada especial. Por lo tanto, ambas técnicas contaminarán su espacio de nombres global.

Así que no, aparte de que create_function () es más fácil, no parece ser mejor que eval ().

Notas al pie:

[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

Otros consejos

El uso de eval () saturará la lista de funciones globales, create_function () no lo hará, aparte de eso no hay una gran diferencia. Sin embargo , ambos métodos requieren escribir el cuerpo de la función dentro de una cadena PHP que es propensa a errores y si estuviera trabajando en mi proyecto, le pediría que simplemente declarara una función auxiliar utilizando la sintaxis normal.

Las funciones anónimas en PHP están tan mal implementadas que su código realmente es mejor que no usándolas. (Afortunadamente esto se solucionará en PHP 5.3).

Personalmente, he descubierto que create_function () es extremadamente útil al ordenar matrices.

De hecho, acabo de buscar en la web, y parece que la documentación de PHP tiene un buen ejemplo de esto.

http://us.php.net/create_function

Desplácese hacia abajo hasta Ejemplo # 3 Uso de funciones anónimas como funciones de devolución de llamada .

create_function puede asignarse a una variable que hace que la función sea accesible a otras partes de su código, mientras que eval solo es útil para el alcance dado.

(aparte del hecho de que es más fácil)

No entiendo cómo puedes descartar esto tan fácilmente. Teniendo en cuenta sus dos ejemplos, ¿cuál es más fácil de entender de un vistazo? Create_function te dice lo que pretendes lograr. Eval no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top