Les niveaux de visibilité déterminent comment les propriétés et les méthodes d’une classe peuvent être modifiées et de quelle façon peut-on y accéder. Chaque niveau sert à contrôler l’accès aux éléments d’une classe.
public
Les instructions définies en public
peuvent être accédées de n’importe où, depuis l’intérieur ou l’extérieur de la classe y compris depuis les classes héritières (voir l’article sur l’héritage).
class Voiture { public $marque; public function afficherMarque() { echo $this->marque; } } $voiture = new Voiture(); $voiture->marque = "Toyota"; // Accès direct possible car $marque est public $voiture->afficherMarque(); // Appel de méthode public
Utilisation ?
- Des méthodes qui font partie de l’API publique de la classe, comme les méthodes pour obtenir ou définir des données.
- Des propriétés qui doivent être directement accessibles sans restrictions.
protected
Les éléments définis en protected
peuvent être approchés uniquement à l’intérieur de la classe dans laquelle l’élément a été déclaré où dans les classes héritières !
class Vehicule { protected $vitesseMax; protected function setVitesseMax($vitesse) { $this->vitesseMax = $vitesse; } } //la classe Moto est héritière class Moto extends Vehicule { public function definirVitesseMax($vitesse) { $this->setVitesseMax($vitesse); // Accès possible car Moto est une classe enfant } } $moto = new Moto(); // $moto->setVitesseMax(200); // Erreur, car setVitesseMax est protected $moto->definirVitesseMax(200); // Valide
Utilisation ?
- Dans une classe de base conçue pour être étendue, où certains comportements internes doivent être partagés avec les classes dérivées.
- Lors de la création de frameworks ou de bibliothèques où vous voulez contrôler l’implémentation tout en permettant l’extension
private
Si vous déclarez des éléments en private
, alors ils ne seront accessibles uniquement à l’intérieur de la classe où ils ont été déclarés
class CompteBancaire { private $solde; private function majSolde($montant) { $this->solde = $montant; } public function deposer($montant) { $this->majSolde($this->solde + $montant); } } $compte = new CompteBancaire(); // $compte->majSolde(1000); // Erreur, car majSolde est private $compte->deposer(1000); // Valide
Utilisation ?
- Pour les détails d’implémentation qui sont essentiels au bon fonctionnement de la classe mais qui ne sont pas destinés à être modifiés ou même vus par les classes enfants.
- Lorsque vous voulez éviter que des classes dérivées ne dépendent de l’implémentation interne spécifique de la classe de base, ce qui permet de changer cette implémentation sans affecter les sous-classes.
Pour garantir la sécurité, l’authenticité et la structure solide des applications orientées objet, il est crucial de comprendre et d’utiliser efficacement les niveaux de visibilité. En réglementant l’accès à divers composants au sein d’une classe, nous pouvons créer des solutions plus robustes et plus faciles à gérer.