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

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

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.

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2023
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram