Visibilité
Les différents niveaux de visibilité des propriétés et méthodes en PHP.
Créé le 9 novembre 2025
Mis à jour le 9 novembre 2025
Introduction
La visibilité d'une propriété, d'une méthode ou d'une constante est définie en préfixant sa déclaration avec un mot-clé :
public : accessible depuis n'importe où
protected : accessible dans la classe et ses classes enfants
private : accessible uniquement dans la classe
Les propriétés
Les propriétés déclarées sans mot-clé de visibilité explicite sont automatiquement définies comme publiques.
class Product { public string $name; private int $count = 0; protected ?string $description = null; }
Visibilité asymétrique
À partir de PHP 8.4, les propriétés peuvent avoir une visibilité asymétrique, avec des droits différents pour la lecture (get) et l'écriture (set).
La visibilité peut être spécifiée séparément pour la lecture et l'écriture, à condition que la visibilité d'écriture ne soit pas plus permissive que celle de lecture.
class Product { public protected(set) string $name; // Lecture publique, écriture protégée private int $count = 0; // Lecture et écriture privées protected private(set) ?string $description = null; // Lecture protégée, écriture privée }
Lorsqu'une classe étend une autre, la classe enfant peut redéfinir toute propriété qui n'est pas marquée final. Elle peut alors élargir la visibilité de lecture ou d'écriture, à condition que la nouvelle visibilité soit égale ou plus permissive que celle de la classe parente.
Attention : lorsqu'une propriété private est redéfinie, cela ne modifie pas la propriété de la classe parente mais crée une nouvelle propriété distincte avec un nom interne différent.
Les méthodes
Les méthodes suivent les mêmes règles de visibilité que les propriétés. Une méthode sans visibilité explicite est considérée comme publique.
class Product { public function getName(): string { return $this->name; } private function updateStock(int $quantity): void { $this->count += $quantity; } protected function getFullDescription(): string { return "{$this->name} : {$this->description}"; } }
Les constantes
Depuis PHP 7.1, les constantes de classe peuvent avoir une visibilité explicite. Par défaut, les constantes sont public.
class Product { public const STATUS_ACTIVE = 'active'; private const PRICE_FACTOR = 1.2; protected const MAX_STOCK = 100; public function calculatePrice(float $base): float { return $base * self::PRICE_FACTOR; } }