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.