
Programando con PHP puede que, en alguna ocasión, hayas tenido que hacer uso de funciones anónimas. Las funciones anónimas son funciones que se declaran en el propio flujo del código que estemos desarrollando y que suponemos que son funciones que vamos a usar solamente en ese lugar, de ahí que no las creemos aparte y las reutilicemos.
Normalmente, estas funciones se usan como recepción de callbacks de otras funciones o eventos, y en ellas se codifica el tratamiento que dicha llamada de retorno o evento debe tener. De esta forma, puedes realizar un desarrollo o programación orientada a eventos, más típica de otros lenguajes como Javascript.
Si alguna vez has programado en Javascript, cuando realizas, por ejemplo, una llamada a la función setTimeout, uno de los parámetros que ésta tiene es un callback a la función que quieres que se ejecute cuando se produzca el evento.
1 | setTimeout( function() { console.log( 'test' ); }, 3000 ); |
Igualmente, en PHP hay momentos en los que es oportuno utilizar callbacks como parámetros de funciones. A continuación vamos a ver el posible uso de una función anónima en PHP. Vamos a suponer que tenemos una función en la que uno de sus parámetros es un callback:
1 | nombre_funcion( $parametro1, $parametro2, $callback = '' ); |
en el parámetro $callback, podríamos directamente meter el nombre de la función que queramos que se ejecute y que tengamos previamente definida, o bien, directamente una función anónima. Vamos a ver las dos formas:
- Mediante una llamada a una función previamente definida:
1 2 3 4 5 | function mi_funcion() { //código de mi_funcion } nombre_función ( $parametro1, $parametro2, 'mi_funcion' ); |
- Mediante el uso de una función anónima:
1 2 3 4 5 | nombre_funcion( $parametro1, $parametro2, function() { //código de la función anónima } ); |
Cómo pasar parámetros o variables a funciones anónimas
Cuando usamos funciones anónimas, dentro del código de éstas, no tenemos acceso a las variables u objetos que previamente tengamos definidos en el flujo del código, por lo que, si necesitamos referenciar a alguna de ellas, o bien la hacemos global, o bien damos acceso a las mismas, tal como veremos a continuación:
Supongamos el ejemplo anterior con algún código previo añadido:
1 2 3 4 5 6 7 | $aux = 'Esto es una prueba'; nombre_funcion( $parametro1, $parametro2, function() { //Desde aquí no tengo acceso a la variable $aux } ); |
Desde dentro de la función anónima no tenemos acceso a la variable $aux definida previamente. Para poder usar dicha variable, tendremos que hacerlo de la siguiente forma:
1 2 3 4 5 6 7 | $aux = 'Esto es una prueba'; nombre_funcion( $parametro1, $parametro2, function() use ( $aux ) { //Ahora sí que tenemos acceso a la variable $aux } ); |
Añadiendo, tras el identificador de función function(), la palabra use seguida, entre paréntesis, de la variable a la que queremos acceder, estamos permitiendo que desde dentro de la función anónima tengamos acceso a dicha variable, lo que nos evitará tener que declarar variables globales y declaraciones de uso posteriores dentro de la función.
