Sobes.tech
Junior

Cosa sono i modificatori di visibilità in PHP?

sobes.tech AI

Risposta dell'AI

I modificatori di visibilità (public, protected, private) determinano il livello di accesso alle proprietà e ai metodi di una classe.

  • public - accessibile da qualsiasi luogo (all'interno della classe, nelle classi ereditate, dall'esterno).
  • protected - accessibile all'interno della classe e nelle classi che ne ereditano.
  • private - accessibile solo all'interno della classe in cui è dichiarato.

Esempio:

<?php

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

    public function publicMethod() {
        echo "Accesso al metodo pubblico: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    protected function protectedMethod() {
        echo "Accesso al metodo protetto: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }

    private function privateMethod() {
        echo "Accesso al metodo privato: " . $this->publicProperty . ", " . $this->protectedProperty . ", " . $this->privateProperty . "\n";
    }
}

class MyChildClass extends MyClass {
    public function testAccess() {
        echo "Accesso nella classe figlia: " . $this->publicProperty . ", " . $this->protectedProperty . "\n"; // Accesso a public e protected
        // echo $this->privateProperty; // Errore, private non accessibile
        $this->publicMethod();
        $this->protectedMethod();
        // $this->privateMethod(); // Errore, private non accessibile
    }
}

$obj = new MyClass();
echo $obj->publicProperty . "\n"; // Disponibile
// echo $obj->protectedProperty; // Errore, protected non accessibile dall'esterno
// echo $obj->privateProperty; // Errore, private non accessibile dall'esterno
$obj->publicMethod();
// $obj->protectedMethod(); // Errore, protected non accessibile dall'esterno
// $obj->privateMethod(); // Errore, private non accessibile dall'esterno

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