Une classe readonly doit correspondre à son parent
<?php
readonly class x {
public string $p;
}
class y extends x {
readonly public string $p;
}
Le readonly class de PHP 8.2 ressemble à du sucre syntaxique pour marquer toutes les propriétés en lecture seule à la fois, mais il vient avec la même règle stricte que les propriétés readonly classiques : toute la chaîne d’héritage doit être d’accord.
C’est vrai même s’il n’y a de propriétés dans aucune des classes.
Une classe non readonly ne peut pas étendre une classe readonly, car cela permettrait à l’enfant de faufiler une propriété mutable.
L’inverse échoue aussi : une classe readonly ne peut pas étendre une classe non readonly, car le parent pourrait déjà avoir une propriété mutable.
Il n’est pas possible de mélanger les deux : rendre toutes les propriétés readonly n’empêche pas le moteur d’exiger que la classe soit aussi readonly à cause du parent.
Il n’y a pas d’adhésion partielle : le caractère readonly est une propriété de toute la hiérarchie de classes, pas d’une seule classe qui la compose.
La façon la plus flexible reste de garder la classe mutable, et de rendre les propriétés readonly une par une.
See Also
PHP Error Messages
- Non-readonly class X cannot extend readonly class Y
- Readonly class X cannot extend non-readonly class Y
PHP Features
Last updated: 04 October 2026