Visibilité asymétrique

PHP 🟡 Mid

Définition

Syntaxe PHP 8.4 qui sépare la visibilité en lecture et en écriture d'une propriété : public private(set) se lit partout mais ne s'écrit que dans la classe. La visibilité d'écriture doit être au moins aussi restrictive que celle de lecture, et la propriété doit être typée. readonly équivaut désormais à protected(set).

Analogie

Une vitrine de magasin : tout le monde voit les articles, seul le personnel peut les déplacer.

Exemple de code

class PhpVersion
{
  public private(set) string $version = '8.4';

  public function increment(): void
  {
    [$major, $minor] = explode('.', $this->version);
    $this->version = $major . '.' . ($minor + 1);
  }
}
$v = new PhpVersion();
echo $v->version;   // OK
$v->version = '9';  // Error : écriture privée

Cas d'usage

Exposer l'état d'un objet en lecture sans getter, tout en gardant le contrôle des mutations dans la classe.

Anti-pattern

Déclarer protected public(set), interdit : l'écriture ne peut pas être plus ouverte que la lecture.
#core#php84#interview

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre