Diferencia entre revisiones de «Clases Readonly»
Ir a la navegación
Ir a la búsqueda
(No se muestran 6 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
= Descripción = | = Descripción = | ||
Introducidas en PHP 8.1, las propiedades readonly serán expandidas en la versión PHP 8.2 para añadir azúcar sintáctico para que todas las propiedades de clases sean readonly al tiempo. | Introducidas en PHP 8.1, las propiedades readonly serán expandidas en la versión PHP 8.2 para añadir azúcar sintáctico para que todas las propiedades de clases sean readonly al tiempo. | ||
Esto prevendrá que las propiedades dinámicas sean añadidas a las clases. | Esto prevendrá que las propiedades dinámicas sean añadidas a las clases. | ||
Línea 9: | Línea 9: | ||
* RFC: [https://wiki.php.net/rfc/readonly_classes EN] | * RFC: [https://wiki.php.net/rfc/readonly_classes EN] | ||
= Ejemplo = | == Observaciones == | ||
* Si declaras una clase como readonly, todas sus propiedades heredarán automáticamente la característica readonly. Así, declarar una clase readonly es lo mismo que declarar todas las propiedades de la clase como readonly. | |||
* Puedes declarar clases abstractas o finales como readonly. | |||
* Puedes declarar una clase readonly sin propiedades. En efecto, esto evita las propiedades dinámicas, pero permite que las clases hijas declaren sus propiedades readonly explícitamente. | |||
* No se puede declarar readonly para los enums, traits e interfaces. | |||
=== Ejemplos === | |||
==== Ejemplo 1 ==== | |||
Todas las propiedades son ''readonly''. | |||
<?php | |||
class Post { | |||
public readonly string $title; | |||
public readonly string $description; | |||
public readonly string $author; | |||
public readonly int year; | |||
} | |||
En vez de escribir todas las propiedades ''readonly'', solo la clase se debe de escribir ''readonly''. | |||
<?php | |||
readonly class Post { | |||
public string $title; | |||
public string $description; | |||
public string $author; | |||
public int year; | |||
} | |||
==== Ejemplo 2 ==== | |||
<?php | <?php | ||
Línea 18: | Línea 49: | ||
} | } | ||
} | } | ||
// Use class. | // Use class. | ||
$object = new Post(); | $object = new Post(); | ||
$object->title = "Hello, soy un titulo nuevo."; | $object->title = "Hello, soy un titulo nuevo."; | ||
Sale por pantalla: | |||
Fatal error: Uncaught Error: Cannot modify readonly property Post::$title in /home/proyectosbeta/Codigo/PHP/versiones/8.2/general/classReadonly.php:12 | |||
Stack trace: | |||
#0 {main} | |||
thrown in /home/proyectosbeta/Codigo/PHP/versiones/8.2/general/classReadonly.php on line 12 |
Revisión actual - 09:32 25 sep 2022
Descripción
Introducidas en PHP 8.1, las propiedades readonly serán expandidas en la versión PHP 8.2 para añadir azúcar sintáctico para que todas las propiedades de clases sean readonly al tiempo.
Esto prevendrá que las propiedades dinámicas sean añadidas a las clases.
Recursos
- RFC: EN
Observaciones
- Si declaras una clase como readonly, todas sus propiedades heredarán automáticamente la característica readonly. Así, declarar una clase readonly es lo mismo que declarar todas las propiedades de la clase como readonly.
- Puedes declarar clases abstractas o finales como readonly.
- Puedes declarar una clase readonly sin propiedades. En efecto, esto evita las propiedades dinámicas, pero permite que las clases hijas declaren sus propiedades readonly explícitamente.
- No se puede declarar readonly para los enums, traits e interfaces.
Ejemplos
Ejemplo 1
Todas las propiedades son readonly.
<?php class Post { public readonly string $title; public readonly string $description; public readonly string $author; public readonly int year; }
En vez de escribir todas las propiedades readonly, solo la clase se debe de escribir readonly.
<?php readonly class Post { public string $title; public string $description; public string $author; public int year; }
Ejemplo 2
<?php readonly class Post{ public string $title; public function __construct(){ $this->title = "Soy un titulo."; } } // Use class. $object = new Post(); $object->title = "Hello, soy un titulo nuevo.";
Sale por pantalla:
Fatal error: Uncaught Error: Cannot modify readonly property Post::$title in /home/proyectosbeta/Codigo/PHP/versiones/8.2/general/classReadonly.php:12 Stack trace: #0 {main} thrown in /home/proyectosbeta/Codigo/PHP/versiones/8.2/general/classReadonly.php on line 12