Sobes.tech
Junior

Qu'est-ce que les modificateurs de visibilité en PHP?

sobes.tech IA

Réponse de l'IA

Les modificateurs de visibilité (public, protected, private) déterminent le niveau d'accès aux propriétés et méthodes d'une classe.

  • public - accessible de n'importe où (dans la classe, dans les classes héritées, depuis l'extérieur).
  • protected - accessible à l'intérieur de la classe et dans les classes qui en héritent.
  • private - accessible uniquement à l'intérieur de la classe où il est déclaré.

Exemple :

<?php

class MyClass {
    public $publicProperty = 'public';
    protected $protectedProperty = 'protected';
    private $privateProperty = 'private';

    public function publicMethod() {
        echo "Accès à la méthode publique : " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Accès à la méthode protégée : " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Accès à la méthode privée : " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Accès dans la classe enfant : " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Accès à public et protected
        // echo $this->privateProperty; // Erreur, private inaccessible
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Erreur, private inaccessible
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Disponible
// echo $obj->protectedProperty; // Erreur, protected inaccessible depuis l'extérieur
// echo $obj->privateProperty; // Erreur, private inaccessible depuis l'extérieur
$obj->publicMethod();
// $obj->protectedMethod(); // Erreur, protected inaccessible depuis l'extérieur
// $obj->privateMethod(); // Erreur, private inaccessible depuis l'extérieur

$childObj = new MyChildClass();
$childObj->testAccess();