uso una típico puede parametros para hablar función funciones ejemplos closure clases anónima anonimas php design-patterns closures anonymous-function

php - una - parametros en funciones anonimas



¿Por qué usar la función anónima? (9)

Diría que las funciones anónimas muestran su belleza cuando hay buenas clases de biblioteca / funciones que las usan. No son tan sexy por sí mismos. En el mundo de .net hay una tecnología llamada LINQ que hace un gran uso de la misma de manera muy idiomática. Ahora volvamos a PHP.

Primer ejemplo, ordenar:

uasort($array, function($a, $b) { return($a > $b); });

Puede especificar lógica compleja para ordenar:

uasort($array, function($a, $b) { return($a->Age > $b->Age); });

Otro ejemplo:

$data = array( array(''id'' => 1, ''name'' => ''Bob'', ''position'' => ''Clerk''), array(''id'' => 2, ''name'' => ''Alan'', ''position'' => ''Manager''), array(''id'' => 3, ''name'' => ''James'', ''position'' => ''Director'') ); $names = array_map( function($person) { return $person[''name'']; }, $data );

Ves lo bien que puedes producir una gran variedad de nombres.

El último:

array_reduce( array_filter($array, function($val) { return $val % 2 == 0; }, function($reduced, $value) { return $reduced*$value; } )

Calcula producto de números pares.

Alguna filosofía ¿Qué es la función? Una unidad de funcionalidad que se puede invocar y una unidad de reutilización de código. A veces solo necesitas la primera parte: capacidad de invocar y realizar acciones, pero no quieres volver a utilizarla e incluso hacerla visible para otras partes del código. Eso es lo que hacen esencialmente las funciones anónimas.

Posible duplicado:
¿Cómo se usan las funciones anónimas en PHP?

¿Por qué debería usar una función anónima? Quiero decir, ¿cuál es el verdadero negocio de usarlo? Simplemente no entiendo esto. Quiero decir, utilizas la función para hacer el código más limpio o para usarlo más de una vez. Pero las funciones anónimas simplemente no hacen ni la primera ni la segunda. Los busqué en Google y no pude encontrar a nadie preguntándome el mismo problema.



Es útil especialmente para las devoluciones de llamada:

array_walk($myArray, function($value, $key) { // do something });


Hay momentos en que DEBE usar una función. Por lo tanto, los cierres mantienen el código limpio al no tener que llenar sus bibliotecas con declaraciones de función que solo se utilizan en un solo lugar. Los cierres son similares a style="" y las clases en CSS. Claro que puedes crear un montón de clases para cada uno de los estilos que tienes, o puedes insertarlos en su lugar ya que no los usas en ningún otro lugar y disminuyen la saturación de tus archivos CSS.

Sin embargo, no es una necesidad, así que si sientes la necesidad de declarar funciones explícitamente, puedes hacerlo.


Normalmente usa funciones anónimas para funciones que necesita una sola vez. De esta forma no se contamina el espacio de nombres de la función y no se inventan nombres de funciones extraños como array_walk_callback1 .


Puede pasar funciones anónimas guardándolas en una variable.

$a=function() { echo ''hello world''; };

Esto significa que también puede usarlos más de una vez.


Quizás la razón más obvia es el uso de devoluciones de llamada. Tome la función usort() por ejemplo. No tiene sentido introducir una función de una línea, que se utilizará una sola vez. La función anónima (por lo general) se adapta mejor a esta tarea.


Si necesita crear una devolución de llamada (para hacer un ejemplo concreto, digamos que es una función de comparación para el uso), las funciones anónimas suelen ser una buena forma de hacerlo. Particularmente si la definición de la función depende de unas pocas entradas (con esto quiero decir un cierre, que NO es sinónimo de función anon)

function createCallback($key, $desc = false) { return $desc ? function($a, $b) use ($key) {return $b[$key] - $a[$key];} : function($a, $b) use ($key) {return $a[$key] - $b[$key];}; } usort($myNestedArray, createCallback(''age'')); //sort elements of $myNestedArray by key ''age'' ascending usort($myNestedArray, createCallback(''age'', true); //descending


Usando jQuery / Javascript puede usarlo para definir devoluciones de llamada de eventos personalizados. Observe cómo maneja el núcleo jQuery AJAX .

Ejemplo de jQuery que usa funciones anónimas para devoluciones de llamadas de eventos:

$.ajax({ url: ''ajax/test.html'', complete: function(data) { $(''.result'').html(data); alert(''Load was performed.''); } });

Otros eventos con devoluciones de llamada personalizadas son beforeSend , error , success . Puede aprovechar al máximo este flexible sistema de devolución de eventos cuando se crean complementos personalizados