Livelli di visibilità Public, Protected e Private nelle Classi - OOP in PHP

Indice
I livelli di visibilità sono delle regole che definiscono come le proprietà e i metodi di una classe possono essere acceduti dall'esterno della classe stessa. In PHP, ci sono tre livelli di visibilità: public, protected e private.
Ecco come funziona ciascuno di questi livelli di visibilità e il loro ruolo:
Livello di visibilità Public:
- I metodi e le proprietà contrassegnati come pubblici sono accessibili ovunque, sia dall'interno della classe che dall'esterno.
- Questo significa che è possibile accedere a questi elementi dalle istanze della classe o dai file inclusi nel progetto.
- Ad esempio, un metodo pubblico può essere chiamato dall'oggetto di una classe come $oggetto->metodo();
Esempio con Public:
Supponiamo di avere una classe Auto
che ha una proprietà pubblica modello
e un metodo pubblico guida()
. La proprietà modello
può essere accessibile da qualsiasi oggetto che istanzia la classe Auto
, così come il metodo guida()
. Ad esempio:
class Auto {
public $modello;
public function guida() {
echo "Sto guidando una $this->modello";
}
}
$auto = new Auto();
$auto->modello = "Ferrari";
$auto->guida(); // Output: Sto guidando una Ferrari
Livello di visibilità Protected:
- I metodi e le proprietà contrassegnati come protetti sono accessibili solo dall'interno della classe stessa e dalle sue sottoclassi.
- Questo significa che gli elementi protetti non sono accessibili dall'esterno della classe, ma solo dalle classi che ereditano dalla classe stessa.
- Ad esempio, un metodo protetto può essere chiamato solo da un oggetto della classe stessa o da un'istanza di una sua sottoclasse.
Esempio con Protected:
Supponiamo di avere una classe Veicolo
che ha una proprietà protetta motore
e un metodo pubblico avviaMotore()
. La proprietà motore
può essere accessibile solo dalle sottoclassi che ereditano dalla classe Veicolo
, ma non dalle istanze della classe Veicolo
o da altre classi che non sono sottoclassi. Il metodo avviaMotore()
può essere invece accessibile da qualsiasi oggetto che istanzia la classe Veicolo
. Ad esempio:
class Veicolo {
protected $motore;
public function avviaMotore() {
// codice per avviare il motore
}
}
class Auto extends Veicolo {
public function cambiaOlio() {
// codice per cambiare l'olio del motore
}
}
$auto = new Auto();
$auto->avviaMotore(); // Output: motore avviato
Livello di visibilità Private:
- I metodi e le proprietà contrassegnati come privati sono accessibili solo dall'interno della classe stessa.
- Questo significa che gli elementi privati non sono accessibili dall'esterno della classe o dalle sue sottoclassi.
- Ad esempio, un metodo privato può essere chiamato solo dall'interno della classe stessa.
Esempio con Private:
Supponiamo di avere una classe Utente
che ha una proprietà privata password
e un metodo pubblico resetPassword()
. La proprietà password
può essere accessibile solo dall'interno della classe Utente
, non può essere accessibile dall'esterno, né dalle sottoclassi. Il metodo resetPassword()
invece può essere accessibile da qualsiasi oggetto che istanzia la classe Utente
. Ad esempio:
class Utente {
private $password;
public function resetPassword($nuovaPassword) {
// codice per reimpostare la password
$this->password = $nuovaPassword;
}
}
$utente = new Utente();
$utente->resetPassword("nuova_password"); // reimposta la password
In sintesi, i livelli di visibilità permettono di definire come i metodi e le proprietà di una classe possono essere accessibili dall'esterno della classe stessa. Public è il livello più accessibile, mentre private è il più restrittivo. Protected si trova a metà tra i due, consentendo l'accesso solo alle sottoclassi.