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


Ayuda con datatables

Hola, acudo a ustedes para ver si pueden orientarme resulta que tengo una tabla que obtiene datos agrupados por nombre de empresa, cada empresa tiene locales en renta y se debe obtener el monto que se debe o que ha sido pagado, segun corresponda tengo algo mas o menos así:

$result = DB::table('espacios') ->select('cuenta_por_cobrars.id','clientes.id as ide...

Obtener Datos de un select en otros input

Buenas estoy intentando que al seleccion un producto me pegue luego en unas cajas de texto los datos.

Mi Controlador:

public function lista(){

$productos = Productos::pluck('Codigo','Descripcion','PVP','id')->prepend('selecciona'); return view ('Productos.NuevoProducto2',compact('productos'));

}

Mi vista:

@extends('admin.plantilla')

@section('content'...

Input que depende del valor seleccionado en Select

Buenas amigos, estoy intentando que al picar en el select me sale el listado de productos por ejemplo y quiero poner en un input el precio.

Por el momento consigo tener mi select lleno de datos, pero no consigo que me envie los datos al input.

Alguna idea o ejemplo para orientarme?

gracias...

componentes

hola amigo italo, buen dia... tengo el siguiente inconveniente... quisiera hacer un select con un componente que me cargue los funcionarios de una empresa y colocarlo en varios formularios en diferentes modales. el componente lo hago correctamente y carga los funcionarios; cuando selecciono el funcionario quisiera cargarlo a una variable VUE que esta en mi instancia principal...