Visita nuestros cursos en KODOTI. Click para unirte
Estudia con KODOTI. Únete

Implementación de Closures en PHP

Los closures en PHP permiten crear funciones anónimas similar a lo que sería un callback en javascript.

Rodríguez Patiño, Eduardo
5,589 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para darle una pronta solución.

Este concepto viene usado hoy en día en la mayoría de los Frameworks modernos para PHP. Por ejemplo, Laravel lo implementa cuando trabajamos con rutas. Aca vamos a resaltar algo que puede generar confusión, en javascript "closure" hace referencia a un scope, es decir una área privada dentro de nuestro código. Es decir, mientras que para PHP se llama closure, en javascript se llama callbacks.

¿Qué es un Closure?

Es una función anónima que podemos declarar ya sea para guardarlo en una variable o como parámetro de entrada de una función.

Guardando una función anónima (closure) en una variable

Primero vamos a ver como guardar una función en una variable, funcionalidad que aplica en Javascript. Esto es un closure

$suma = function($a, $b){
    return $a+$b;
};

echo $suma(4,10);

Quería que entiendan ese concepto, ya que lo vamos a recibir en nuestro closure son variables que contienen una función.

Ejemplo práctico

En este ejemplo vamos a crear 2 clases para autenticar a un usuario usando closure:

  1. User: contiene la información básica del usuario.
  2. UserLogic: es una clase que implementa la lógica de negocio. En nuestro caso la lógica para autenticar y recibe como parámetro un closure.
class User{
    public $id;
    public $Name;
    public $UserName;
}

class UserLogic
{
    public static function TryToLogin($user, $pass, $closure) {
        if($user === 'user' && $pass === '123456'){
            $user = new User();
            $user->id = 1;
            $user->Name = 'Eduardo Rodriguez';
            $user->UserName = 'erodriguez';

            $closure($user);
        } else {
            $closure(null);
        }
    }
}

UserLogic::TryToLogin

Si analizamos este método, lo que hacemos es validar en duro el usuario autenticar, si esta condición es verdadera retornamos la instancia de un nuevo usuario del caso contrario, simplemente null.

¿Cómo lo ponemos en práctica?

UserLogic::TryToLogin('user', '123456', function($res){
    var_dump($res);
});

Entonces nuestro closure, que es el 3er parámetro seteará la variable $res en caso de éxito instanciando al Usuario.

¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín