Curso Avanzado de PHP

Curso Avanzado de PHP

Héctor Benitez

Héctor Benitez

Closures

5/35
Recursos

Closures:

  • Son conocidos como funciones anónimas, permiten la creación de funciones que no tienen un nombre específico.
  • Pueden ser asignadas a funciones, variables, o usadas como parámetros y valores de retorno.
  • Las variables pueden contener cualquier tipo de dato como enteros, cadenas y objetos, pero también pueden contener funciones.
  • Para usar variables del scope superior en los closures, es necesario usar el “use” y entre paréntesis las variables.

Al utilizar array filter lo que hacemos es que le pasamos un arreglo y corremos una función sobre cada elemento del arreglo. Si lo que se regresa es true o verdadero, se dejará en el nuevo arreglo generado.

Aportes 30

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

  • Las funciones anónimas, también conocidas como cierres (closures), permiten la creación de funciones que no tienen un nombre especificado.

  • sintaxis de un closure

 $filtro = function ($job) use($maxMount) {
            return $job["months"] > $maxMount;
        };
  • Para usar variables externas dentro de los closure usamos use($variable)

No olvidemos profundizar sobre el tema, el profesor nos da una idea general en cuanto a su uso.

Si investigan esta la clase predefinida tambien.

https://www.php.net/manual/es/functions.anonymous.php
https://www.php.net/manual/es/class.closure.php

Saludos y sigamos aprendiendo!

Vengo a contar que a día 8 de abril de 2022 he conseguido llegar hasta esta clase, tras pasar dos días de calvario configurando vagrant en windows, luego resolviendo incompatibilidad de versiones de php, y finalmente ajustando la base de datos para poder visualizar el cursophp.test, ya lo considero un logro jajajaja. Ahora ya podemos empezar el curso real!

Que interesante lo de los closures

Interesante, si sabía lo de los Cosures en PHP pero… no se si me equivoco, en JavaSript tienen una definición diferente, ya que prácticamente en JavaScript es una función que regresa otra función y mantiene el scope de las variables, extraño…

Pregunta en que casos se recomienda usar los Closures ??

Un poquito de psr2 seria genial teacher 😉

Esta funcionalidad es muy importante a la hora de iterar, lo cual es php iterar es demasiado usado

Me gustó esta clase, me parece algo útil el closure y creo que lo empezaré a implementar en mis proyectos, veremos como se pone el curso de momento vamos bien

La filter function no solo valida la propiedad que yo deseo para filtrar los registros que me retorna la consulta de la base de datos, sino que también me elimina la propiedad por la que estoy filtrando, es decir, en este ejemplo que estamos filtrando por la propiedad “months” no solo permite que se muestren los “jobs” que cumplan con la condición, sino que también, ya no permite imprimir en pantalla el valor de “months” de aquellos jobs.

Excelente explicación.

Estoy utilizndo visual code como se llama la extension para que me vizualize (title:‘Project’,

Normalmente solo sale la sintaxis Project.
-> me refiero a la palabra title que aparece en letra color plomo!!!

Si alguno le sale este error:

Debe agregar en la base de datos las tablas “project” y “users”. Adicional debe modificar el archivo .env.

Señores, Iniciamos!! Todo comenzó perfect.

los closures son las funciones anonimas

Es muy similar a la funcionalida de los array functions en Javascript ES6

Son conocidos como funciones anónimas, permiten la creación de funciones que no tienen un nombre específico.

Pueden ser asignadas a funciones, variables, o usadas como parámetros y valores de retorno.

Las variables pueden contener cualquier tipo de dato como enteros, cadenas y objetos, pero también pueden contener funciones.

Para usar variables del scope superior en los closures, es necesario usar el “use” y entre paréntesis las variables.

Al utilizar array filter lo que hacemos es que le pasamos un arreglo y corremos una función sobre cada elemento del arreglo. Si lo que se regresa es true o verdadero, se dejará en el nuevo arreglo generado.

Tengo un problema, me sale error al usar el $jobs->toArray(), a alguien le pasa igual?

Esto me sale:

( ! )Fatal error: Uncaught InvalidArgumentException: Trailing data in /home/vagrant/code/curso-introduccion-php/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php on line 594
( ! ) InvalidArgumentException: Trailing data in /home/vagrant/code/curso-introduccion-php/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php on line 594

Mi código:

$jobs = array_filter($jobs->toArray(), function($job){
            return $job['months']>= 15;
        });

Los cierres también pueden heredar variables del ámbito padre. Cualquier variable debe ser pasada al constructor de lenguaje use. Desde PHP 7.1, estas variables no deben incluir superglobals, $this, o variables con el mismo nombre que un parámetro.

Genial, gracias Hector, tuve un problema con la aplicación de mi trabajo, tenia que hacer un cambio y utilizar una variable que no estaba en el mismo scope usando closure (otro programador hizo esa función), no supe porque no pude utilizar dicha variable, después tube recorrer el array retornado para hacer otra operación ya estando en el mismo scope…
Esta clase luego me hizo recordar el problema y cual es la solución, jamas lo olvidare… jejeje

Los Closures: son como las funciones en Javascript, las puedes asignar pasar como parámetros retornarlas,

Excelente los Closures el scope nos deja mas claro que usamos dentro de cada función anónima y como debemos de decir que use lo que esta afuera es más claro

Link a la documentacion de los closures

Porfa si me pueden ayudar tengo el siguiente codigo

<<?php

    namespace App\Controllers;
    use App\models\{Job, Project};


    class IndexController  extends BaseController{
        public function indexAction(){

           

                        
           
            //require_once('../proyecto/jobs.php');
            $jobs = Job::all();
          
                $limitMonths = 15;

            $filterClosure = function (array $job) use ($limitMonths) {
                return $job['months'] > $limitMonths;
            };

            $jobs = array_filter($jobs->toArray(), $filterClosure);
            echo $jobs;
            $proyect = Project::all();

            return $this->renderHTML('index.twig' , [
                'jobs' =>$jobs,
                'proyect' => $proyect
            ]);
            //include '../views/index.php';
                    
        }
    }>

y me sale un error de
Array to string conversion in /home/vagrant/code/proyecto/Controllers/IndexController.php on line 24 que supongo que es la linea del toArray alguien que me ayude porfa

5 capítulos para iniciar clave avanzada de php…

super la explicacion