"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Ganchos de propiedad sin PHP

Ganchos de propiedad sin PHP

Publicado el 2024-11-08
Navegar:171

Property Hooks no PHP

En noviembre tendremos el lanzamiento de la versión 8.4 de nuestro querido PHP y con ella tendremos una nueva característica muy esperada por la comunidad: ¡propiedades ganchos! Inspirada en otros lenguajes como C#, Swift y Kotlin, esta nueva característica elimina la molestia de los métodos mágicos __set() y __get().

Voy a mostrar un ejemplo de cómo tener captadores y definidores actualmente sin tener que crear la propiedad como privada y crear dos métodos nuevos con nombres diferentes a los de la propiedad.

class Foo
{
    private String $bar;

    public function __set($name, $value)
    {
        $this->$name = $value . "!!!"; 
    }

    public function __get($name)
    {
         return "!!!" . $this->$name;
    }
}

Usando __get() y __set() puedo dejar la $bar pública cuando establezco el valor y cuando busco el valor, pero con diferente implementación y sin tener que crear métodos con nombres distintos a la propiedad. En un ejemplo visual, el uso se vería así:

$foo = new Foo();

$foo->bar = "new release";
// aqui o valor que ficará salvo seria "new release!!!"

echo $foo->bar; // aqui retornaria "!!!new release!!!"

Ahora imagina cómo se verían __get() y __set() con otras propiedades, un desastre total. Otra forma de hacer esto sería crear un método getBar() y otro método setBar(), pero esto solo considera una propiedad y el uso sería diferente al anterior:

class Foo
{
    private String $bar;

    public function setBar($value)
    {
        $this->bar = $value . "!!!"; 
    }

    public function getBar()
    {
         return "!!!" . $this->bar;
    }
}

$foo = new Foo();

$foo->setBar('new release');
// aqui o valor que ficará salvo seria "new release!!!"

echo $foo->getBar(); // aqui retornaria "!!!new release!!!"

Personalmente, encuentro un poco molesto crear nuevos métodos para este caso de uso, prefiero usar la llamada directa de la propiedad tanto para obtener como para establecer su valor. Esta nueva característica llega para resolver este lío y le permite definir get y set individualmente junto con la declaración en la clase.

class Foo
{
    public String $bar {
        set (String $value) => $this->bar = $value . "!!!";
        get => "!!! . $this->bar";
    }
}

Este nuevo código hace lo mismo pero de forma individual, sin crear nuevos métodos ni usar __get() y __set() que necesitan tratamiento para cada propiedad que tiene la clase.

¡Ahora solo espera el lanzamiento de esta nueva función, que debería estar disponible el 21 de noviembre!

Declaración de liberación Este artículo se reproduce en: https://dev.to/luciencorreia/property-hooks-no-php-84-2jld?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3