readonly ahora está disponible en PHP 8.1, solo me pregunto para qué sirve. ¿Es eso para ayudar al editor a saber que esta propiedad es solo de readonly o para ayudar al cliente a saber eso o hay otro beneficio?
Las propiedades de readonly le permiten crear objetos inmutables o, al menos, propiedades inmutables.
De esa manera, puede estar seguro de que un valor no cambiará por accidente después de inicializarse, a lo largo de la vida del objeto.
Es un concepto muy similar a las constantes (establecidas a través de const o define ), aunque con dos diferencias importantes:
readonly se establecerán durante el tiempo de ejecución, generalmente durante la instanciación del objeto (por lo que varias instancias podrán contener diferentes valores *)Podría lograr lo mismo con una propiedad privada a la que solo se puede acceder a través de un getter. Por ejemplo, en "los viejos tiempos":
class Foo { private DateTimeImmutable $createAt; public function __construct() { $this->createdAt = new DateTimeImmutable(); } public getCreatedAt(): DateTimeImmutable { return $this->createdAt; } } $f = new Foo(); echo $f->getCreatedAt()->format('Ymd H:i:s');El único problema con esto es que requiere mucho código repetitivo.
Con PHP 8.1. lo mismo podría lograrse haciendo:
class Foo { public function __construct( public readonly DateTimeImmutable $createdAt = new DateTimeImmutable() ) { } } $f = new Foo(); echo $f->createdAt->format('Ymd H:i:s')