Blog de Gonzalo

CLASES ANÓNIMAS EN PHP

Las clases anónimas en php están disponibles desde la versión 7 de php y son clases que no disponen de un nombre, sino que forman parte de una estructura de apoyo y son muy necesarios al crear objetos simples y únicos que solo se utiliza una sola vez durante la ejecución del programa. Se peden pasar argumentos a través de sus constructores, extender otras clases, implementar interfaces, y utilizar rasgos al igual que una clase normal. Ahora veamos un ejemplo sencillo para crear una clase anónima:


$telefono = new class('Samsung','Galaxy', 'Negro') {
    public $marca;
    public $modelo;
    public $color;

    function __construct($marca, $modelo, $color){
        $this->marca = $marca;
        $this->modelo = $modelo;
        $this->color = $color;
    }
    public function marcaModelo(){
        return $this->marca . ' modelo ' . $this->modelo;
    }
};
echo $telefono->marcaModelo();
Como se puede ver es bastante sencillo.
Cuando se crea una clase anónima dentro de otra clase, la clase anónima no tiene acceso a ningún método o propiedad privados o protegidos de la clase externa. Para utilizar las propiedades o métodos protegidos de la clase externa, la clase anónima puede extender la clase externa. Para utilizar las propiedades privadas de la clase externa en la clase anónima, estos deben pasarse a su constructor. Como se puede ver en el siguiente ejemplo: (de la página php.net)

class Externa
{
    private $prop = 1;
    protected $prop2 = 2;

    protected function func1()
    {
        return 3;
    }

    public function func2()
    {
        return new class($this->prop) extends Externa {
            private $prop3;

            public function __construct($prop)
            {
                $this->prop3 = $prop;
            }

            public function func3()
            {
                return $this->prop2 + $this->prop3 + $this->func1();
            }
        };
    }
}
echo (new Externa)->func2()->func3();
Las clases anónimas son una solución rápida para un propósito en particular que se va a utilizar una sola vez durante la ejecución del programa. Encaja muy bien cuando necesitamos funcionalidades exactas que no se parecen a ningún otro tipo.
Os recomiendo leer mi post sobre stdclass

Compartir en twitter