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 [2021/11/22 19:59] 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 65: Line 76:
 ==== Inheritance ==== ==== Inheritance ====
  
-Similarly how overriding of readonly properties works, only a readonly class can extend a readonly parent:+Similarly how overriding of readonly properties works, a readonly class can only extend a readonly parent:
  
 <PHP> <PHP>
-class A {} +readonly class A {} 
-readonly class B extends A {}+readonly class B extends A {} // valid
 </PHP> </PHP>
  
-Both of the following are illegal:+But both of the following are illegal:
  
 <PHP> <PHP>
Line 96: 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