Adiós a los Getters y Setters: Domina los Property Hooks en PHP 8.4

Adiós a los Getters y Setters: Domina los Property Hooks en PHP 8.4

Oscar
por Oscar

"¡Dile adiós a los interminables métodos Get y Set! PHP 8.4 revoluciona la forma en la que manejamos los datos con los Property Hooks. Aprende cómo simplificar tus clases, mejorar la validación y escribir un código mucho más limpio y moderno."

Llevas tiempo programando en PHP, conoces bien el ritual: declaras una propiedad privada, generas un getName(), luego un setName(), añades validaciones... y de repente, una clase que solo debería guardar un nombre tiene 30 líneas de código repetitivo.

Con la llegada de PHP 8.4, este patrón (conocido como boilerplate) ha pasado a la historia gracias a los Property Hooks.

¿Qué son los Property Hooks?

Los Property Hooks permiten definir lógica de interceptación directamente en la declaración de una propiedad pública. Es decir, puedes validar, transformar o calcular valores justo cuando alguien intenta acceder o modificar la propiedad, pero manteniendo la limpieza de una propiedad pública.

El ejemplo práctico: Gestión de Precios

Imagina una clase que maneja productos. Queremos que el precio siempre se guarde con el IVA aplicado y que nunca sea negativo.

La forma antigua (Antes de PHP 8.4)

Teníamos que recurrir a la visibilidad privada para proteger el dato y crear métodos extra:

class Product
 {
    private float $price;

    public function getPrice(): float 
   {
        return $this->price;
    }

    public function setPrice(float $value): void 
   {
        if ($value < 0) {
            throw new InvalidArgumentException('Negative price is wrong');
        }
        $this->price = $value * 1.21; // Taxes
    }
}


//use
$p = new Product();
$p->setPrice(100);
echo $p->getPrice(); // 121

La forma moderna (PHP 8.4+)

Ahora la lógica vive dentro de la propia propiedad. Es más legible y directo:

class Product
 {
    public float $price {
        set {
            if ($value < 0) {
                throw new InvalidArgumentException('Negative PrIce is wrong');
            }
            $this->price = $value * 1.21;
        }
        get => $this->price;
    }
}

$p = new Product();
$p->price = 100; // Se active
echo $p->price;  // 121 Get Active

 

Característica Forma Antigua (Get/Set) Forma Nueva (Hooks)
Líneas de código Muchas (Propiedad + 2 métodos) Pocas (Declaración única)
Sintaxis de uso $obj->setPrice(10) $obj->price = 10
Encapsulación Manual mediante private Nativa en la propiedad
Interfaces Solo métodos ¡Puedes definir propiedades!

Implementación y Documentación

  • Versión de PHP: Esta funcionalidad se implementó oficialmente en PHP 8.4, lanzada el 21 de noviembre de 2024.

  • Documentación oficial: Puedes consultar todos los detalles técnicos en la página de PHP.net: Property Hooks.

 

Post Relacionados

Explora nuestras categorías