Funciones Anónimas - Closures PHP

Funciones Anónimas - Closures PHP

Las funciones anónimas son funciones especiales ya que no tienen nombres. PHP dice que también son conocidas como cierres (closures), y aunque redunde hay que decir que permiten la creación de funciones que no tienen un nombre especificado. Esto, para que se entienda bien, podemos imaginar a una variable con necesidad de lógica. Como no tiene nombre, esta función anonima se le asigna a una variable.


Esto sería una función anonima o closures

<?php

    function($name){
        return "Hola, {$name}";
    };

Al ver esto nace una pregunta lógica. ¿Cómo llamamos a una función sin nombre?, y la respuesta es sencilla, una función sin nombre podemos asignarla a una variable, es un valor normal y verás que es muy sencillo.

<?php

    $greet = function($name){
        return "Hola, {$name}";
    };

    echo $greet('Italo Morales');

Puedes notar que la función anónima es el valor de una variable llamada $greet que significa saludar. La variable debe terminar con punto y coma, por eso ves al final el signo llaves junto al punto y coma };, simplemente porque esto forma parte de la sintaxis de asignación.

Nota ademas que para hacer uso de la variable, no debemos olvidar los paréntesis. Ejemplo $greet(), variable con paréntesis.

Ya ves, simplemente añadimos paréntesis a nuestra variable y el código es ejecutado con éxito.

Funciones como parámetros de funciones

Esto quiere decir, pasar pequeñas secciones o bloqués de código a funciones. No parámetro comunes, sino mas bien lógica.

Además decimos el tipo de parámetro usando la palabra Closure delante del parámetro función, esto es para asegurarnos de que unicamente es permitido pasar funciones anónimas y no variable común. Esto es un objeto en PHP.

<?php

    function greet(Closure $gender, $name) {
        return $gender($name);
    }

    $female = function ($name) {
        return "Hola señora, {$name}";
    };

    $male = function ($name) {
        return "Hola señor, {$name}";
    };

    echo greet($female, 'Luisa Fantone');
    echo '<br>';
    echo greet($male, 'Italo Morales');

Explicación:

  • Primero tenemos una función llamada greet(), pero en realidad no está saludando a nadie. Sin embargo su utilidad es recibir una función anónima y ahí está la magía... Porque desde ahí llamamos a la Closure y le pasamos el nombre para que salude a quien deseamos saludar.
  • Mas abajo tenemos dos funciones anónimas asignadas a las variables $female y $male. Ambas reciben el parámetro $name y tienen la lógica para saludar correctamente.
  • Por último tenemos el uso y llamado a la función greet().

Y con esto culminamos lo que para muchos es díficil de entender, las funciones anónimas o closure.

El código está en Github de Rimorsoft Regálanos estrellas y está pendiente de los otros post de PHP.

Adquiere en preventa y aprovecha un gran descuento TDD en Laravel

Comparte en

Creado por: Venezuela Italo Morales

Profesor de #Laravel y #PHP en Rimorsoft Online

Más información


Spatie/Laravel Permission ¿Cómo agregar campos en la tabla "roles"?

Hola, mi consulta es la siguiente:

Relacioné la tabla "roles" con mi tabla** "empresa**", es decir, en la tabla "roles", tengo el campo "id_empresa", en la vista, están los campos necesarios y el select de la empresa pero al querer guardar los datos, me arroja el siguiente error: ** "The given role or permission should use guard web instead of Empresas. "** No ...

SOFTWARE PARA CONSULTORIOS MEDICOS

Hola Amigos. soy nuevo en el grupo.. me gustaria saber si alguien tiene o tuvo algun proyecto basado en laravel, para consultorios medicos? ...

sincronización de componentes hermanos

un gran saludo a la comunidad rimorsorf... espero de su valiosa ayuda para mi problema que es el siguiente:

tengo dos componentes en el mismo nivel, el primero crea una tabla con una lista de procesos por tramitar y el segundo componente lista en una tabla los procesos que se han asignado para tramitar; cuando en la primera tabla se asigna el proceso este debe desaparecer de...

plantilla blade y vuejs2

buenas noches comunidad, por casualidad alguien sabrá si se puede integrar la plantilla de laravel blade en vuejs2 component??, gracias dee antemano...