Autres types pour une propriété
<?php
class X {
public string $p {
set(string|A|null $value) {
$this->p = (string) $value;
}
get => $this-p . ' more';
}
}
class A {
function __toString() {
return 'abc';
}
}
$x = new X;
$x->p = new A;
Il est possible de faire accepter à une propriété typée plus que son type de définition.
Grâce aux propriétés à hooks, le type de la valeur entrante peut être différent du type final : en effet, le hook de la propriété doit convertir cette valeur vers le type réel.
Une contrainte est que le type supporté doit être plus large que le type sous-jacent de la propriété. Cela s’obtient facilement en utilisant un type union composé du type de la propriété et de tous les autres types nécessaires.
En revanche, le hook get ne peut retourner que son type exact : pas de covariance, pas de contravariance.
See Also
- Le type accessible en écriture d’une propriété peut désormais différer de son type accessible en lecture
- Assigner une valeur à une propriété [Try me]
PHP Features
Last updated: 11 October 2026