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.

Ce site est susceptible d'utiliser des cookies pour améliorer votre expérience utilisateur