rfc:readonly_classes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:readonly_classes [2022/04/19 07:09] kocsismaterfc:readonly_classes [2022/05/11 06:57] kocsismate
Line 2: Line 2:
   * Date: 2021-08-04   * Date: 2021-08-04
   * Author: Máté Kocsis <kocsismate@php.net>   * Author: Máté Kocsis <kocsismate@php.net>
-  * Status: Under Discussion+  * Status: Accepted
   * Target Version: PHP 8.2   * Target Version: PHP 8.2
   * Implementation: https://github.com/php/php-src/pull/7305   * Implementation: https://github.com/php/php-src/pull/7305
Line 20: Line 20:
 </PHP> </PHP>
  
-Doing so will implicitly mark all instance properties of a class as readonly. Furthermore, it will prevent the usage of dynamic properties.+Doing so will implicitly mark all instance properties of a class as readonly. Furthermore, it will prevent the creation of dynamic properties.
  
 <PHP> <PHP>
Line 39: Line 39:
 // Fatal Error: Uncaught Error: Cannot create dynamic property Foo::$baz // Fatal Error: Uncaught Error: Cannot create dynamic property Foo::$baz
 </PHP> </PHP>
 +
 +[[rfc:deprecate_dynamic_properties|PHP RFC: Deprecate dynamic properties]] added support for the ''#[AllowDynamicProperties]'' attribute which makes it possible to create dynamic properties without triggering errors. In order not to violate the read-only constraint, marking readonly classes with the above attribute is a compile-time error:
 +
 +<PHP>
 +#[AllowDynamicProperties]
 +readonly class Foo {
 +}
 +
 +// Fatal error: Cannot apply #[AllowDynamicProperties] to readonly class Foo
 +</PHP>
 +
  
 ==== Restrictions ==== ==== Restrictions ====
Line 68: Line 79:
  
 <PHP> <PHP>
-class A {}+readonly class A {}
 readonly class B extends A {} // valid readonly class B extends A {} // valid
- 
-readonly class C {} 
-readonly class C extends B {} // valid 
 </PHP> </PHP>
  
Line 99: Line 107:
 ===== Vote ===== ===== Vote =====
  
-Add readonly classes as proposed?+Voted started on 2022-04-27, ending on 2022-05-11 
 + 
 +<doodle title="Add readonly classes as proposed?" auth="kocsismate" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
rfc/readonly_classes.txt · Last modified: 2022/08/21 08:47 by kocsismate