Las funciones anónimas están disponibles desde PHP 5.3.
Las funciones anónimas han estado disponibles en PHP durante mucho tiempo: create_function ha estado presente desde PHP 4.0.1. Sin embargo, tienes razón en que hay un nuevo concepto y sintaxis disponibles a partir de PHP 5.3.
¿Los debería usar o evitar? ¿Si es así, cómo?
Si alguna vez ha utilizado create_function
, la nueva sintaxis puede simplemente deslizarse en el lugar donde la utilizó. Como han mencionado otras respuestas, un caso común es para las funciones "desechables", donde se deben usar una sola vez (o en un solo lugar al menos). Comúnmente que se presenta en forma de devoluciones de llamada para los gustos de array_map/reduce/filter, preg_replace_callback, usort, etc ..
Ejemplo del uso de funciones anónimas para contar el número de veces que las letras aparecen en palabras (esto podría hacerse en un número de otras maneras, es sólo un ejemplo):
$array = array('apple', 'banana', 'cherry', 'damson');
// For each item in the array, count the letters in the word
$array = array_map(function($value){
$letters = str_split($value);
$counts = array_count_values($letters);
return $counts;
}, $array);
// Sum the counts for each letter
$array = array_reduce($array, function($reduced, $value) {
foreach ($value as $letter => $count) {
if (! isset($reduced[$letter])) {
$reduced[$letter] = 0;
}
$reduced[$letter] += $count;
}
return $reduced;
});
// Sort counts in descending order, no anonymous function here :-)
arsort($array);
print_r($array);
cual da (cortado con tijeras por razones de brevedad):
Array
(
[a] => 5
[n] => 3
[e] => 2
... more ...
[y] => 1
)
Hombre, no obtengo ese uso de DependencyInjection en absoluto. – Kzqai
@Tchalvak, ¿por qué? En cuanto a mí, es realmente fácil de implementar y usar. ¿Hay trampas? – Kirzilla
@Kirzilla '$ container = new DependencyInjectionContainer();' no tiene nada que ver con las funciones anónimas –