Mayo 08, 2014
enzo
Las funciones anónimas fueron implementadas en PHP 5.3, por tanto está sera la versión minina necesaria para ejecutar nuestras aplicaciones en Silex. al que igual que sos homónimas de Javascript las funciones anónimas no requieren un nombre definido y son ideales para usarlas como parámetros de funciones que son utilizadas para procesar alguna información, como se puede apreciar en el siguiente ejemplo.
<?php
echo preg_replace_callback('~-([a-z])~', function ($coincidencia) {
return strtoupper($coincidencia[1]);
}, 'hola-mundo');
// imprime holaMundo
?>
Como se aprecia la función anónima se ejecutar como respuesta a la función preg_replace, esta implementación de las funciones anónimas también es conocida como closures.
Otra implementación de una función anónima son las funciones lambda que permite la asignación de la función a una variable al mejor estilo de Javascript como se puede ver a continuación.
<?php
$saludo = function($nombre)
{
printf("Hola %s\r\n", $nombre);
};
$saludo('Mundo');
// Imprimer Hola Mundo
$saludo('PHP');
// Imprime Hola PHP
?>
Otra funcionalidad util de las funciones anónimas es el poder pasarle variables, que de otra forma tendría que ser declaradas como variables globales, veamos el siguiente ejemplo.
// This is just creating a really simple array.
$myArray = array('a', 'really', 'simple', 'array');
$valueToCheckAgainst = array('a', 'b', 'b');
// Call the array_filter function using our really simple array and a
// custom callback.
$myNewArray = array_filter($myArray, function($value) use ($valueToCheckAgainst) {
return !in_array($value,$valueToCheckAgainst);
});
var_dump($myNewArray);
// Imprime
array(3) {
[1]=>
string(6) "really"
[2]=>
string(6) "simple"
[3]=>
string(5) "array"
}
Como se puede apreciar usando el keyword use se le pasa la variable de tipo array $valueToCheckAgainst sin que sea una variable global.
Ahora solo resta que quizás nos restar usar el poder de las funciones anónimas usando el chip mental que ya estábamos usando en Javascript.
Espero que haya sido de su agrado.