Modificatori di accesso in PHP

Costruttori e distruttori in PHP
Ereditarietà in PHP OOP

In PHP, i modificatori di accesso sono una parte importante della programmazione orientata agli oggetti (OOP). Specificano l'ambito delle variabili o dei metodi di classe e il modo in cui è possibile accedervi. In questo post, esamineremo i diversi tipi di modificatori di accesso in PHP e offriremo esempi su come utilizzarli.

Tipi di modificatori di accesso in PHP

In PHP, i modificatori di accesso sono classificati come pubblici, privati ​​o protetti.

  • Pubblico: è possibile accedere ovunque a un metodo o attributo impostato su pubblico. Questo è il modificatore di accesso predefinito in PHP.
  • Privato: è possibile accedere a un metodo o attributo impostato su privato solo all'interno della classe in cui è stato creato.
  • Protetto: è possibile accedere a un metodo o attributo impostato su protetto all'interno della classe in cui è stato creato, nonché nelle classi che ereditano da tale classe.

Esempi

class Person{
  public $name;
  protected $age;
  private $height;
}

$x= new Person();
$x->name = 'John'; // OK
$x->age= '32'; // ERROR
$x->height= '5.4'; // ERROR

Nell'esempio sopra, definiamo una classe "Person" con tre attributi, ciascuno con un modificatore di accesso separato. L'attributo "name" è pubblico, l'attributo "age" è protetto e l'attributo "height" è privato. Quando proviamo ad accedere all'attributo "name" al di fuori della classe e ad aggiungervi un valore, tutto funziona correttamente. Tuttavia, il tentativo di aggiungere valori alle proprietà "age" e "height" al di fuori della classe genera un errore irreversibile.

Metodi pubblici, privati ​​e protetti

class Person{
  public $name;
  public $age;
  public $height;

  function set_name($n) {  // a public function (default)
    $this->name = $n;
  }
  protected function set_age($a) { // a protected function
    $this->age = $a;
  }
  private function set_height($h) { // a private function
    $this->height = $h;
  }
}

$person = new Person();
$person->set_name('John'); // OK
$person->set_age('26'); // ERROR
$person->set_height('5.4'); // ERROR

Nell'esempio sopra, costruiamo una classe "Person" con tre metodi, ciascuno con un modificatore di accesso separato. Il metodo "imposta nome" è pubblico, il metodo "imposta età" è protetto e il metodo "imposta altezza" è privato. Quando proviamo a invocare la funzione "set name" dall'esterno della classe, funziona bene. Quando proviamo a chiamare i metodi "set age" e "set height" dall'esterno della classe, otteniamo un errore fatale.

Modificatori di accesso avanzati: Abstract e Final

PHP fornisce sofisticati modificatori di accesso denominati "abstract" e "final" oltre ai normali modificatori di accesso.

  • Un modificatore di accesso astratto può essere utilizzato solo su classi e metodi. Viene utilizzato per costruire un progetto di classe, tuttavia la classe non può essere istanziata. I metodi astratti sono metodi che ogni classe che eredita dalla classe astratta deve implementare.
  • A classi, metodi e proprietà può essere assegnato un modificatore di accesso finale. Viene utilizzato per proibire l'estensione o l'override di una classe o di un metodo.

Esempi

abstract class Bike {

    private $maxSpeed = 80;

    // Simple method
    public function drivingSpeed() {
        return "Driving at " . $this->maxSpeed . " kilometer/hour";
    }

    // Abstract method
    abstract public function drive();
}

class Police extends Bike {

    public function drive() {
        return "Driving out of speed limit.";
    }

}

$bike= new Police();
echo $bike->drivingSpeed();

Nell'esempio sopra, costruiamo un file astratto classe denominata "Bike" che ha una funzione astratta chiamata "drive()". Successivamente costruiamo una nuova classe chiamata "Police", che si estende la classe “Bike” e implementa la funzione “drive()”. Usiamo invece la classe “Police” perché non possiamo costruire un oggetto della classe astratta.

Infine, i modificatori di accesso sono una parte importante dell'OOP in PHP e vengono utilizzati per limitare l'ambito delle variabili o delle funzioni di classe. Comprendere e utilizzare in modo efficace i modificatori di accesso può aiutarti a sviluppare un codice più sicuro e gestibile.

Q&A

D: Cosa sono i modificatori di accesso?
R: I modificatori di accesso definiscono l'ambito delle variabili o dei metodi di classe, oltre a dove è possibile accedervi. In PHP, i modificatori di accesso sono classificati come pubblici, privati ​​o protetti.

D: Qual è il modificatore di accesso predefinito?
R: Il modificatore di accesso predefinito di PHP è public. Se non fornisci il modificatore di accesso durante la creazione di un metodo o di un attributo in una classe PHP, viene impostato su public per impostazione predefinita.

D: Qual è la differenza tra i modificatori di accesso privato e protetto?
R: Un metodo o attributo privato può essere accessibile solo all'interno della classe che lo ha generato, ma è possibile accedere a un metodo o attributo protetto all'interno della classe che lo ha creato così come alle classi che hanno ereditato da quella classe.

D: Puoi fornire un esempio dell'utilizzo di un modificatore di accesso astratto in PHP?

abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

Nell'esempio sopra, costruiamo una classe astratta chiamata "Bike" che ha una funzione astratta chiamata "drive()". Successivamente costruiamo una nuova classe chiamata "Police", che estende la classe "Bike" e implementa la funzione "drive()". Usiamo invece la classe “Police” perché non possiamo costruire un oggetto della classe astratta.

D: Come funziona il modificatore di accesso finale?
R: Il modificatore di accesso finale può essere applicato a classi, metodi e proprietà. Viene utilizzato per impedire l'estensione di una classe o l'override di un metodo. Ciò significa che qualsiasi classe che eredita da una classe final non può essere estesa e qualsiasi metodo contrassegnato come final non può essere sovrascritto.

esercizi:

  1. Qual è il modificatore di accesso predefinito in PHP?
  2. Qual è la differenza tra i modificatori di accesso privato e protetto in PHP?
  3. Fornisci un esempio di utilizzo di un modificatore di accesso astratto in PHP.
  4. Come funziona il modificatore di accesso finale?
  5. Puoi creare un oggetto di una classe astratta? Perché o perché no?
  6. Puoi eseguire l'override di un metodo final in una classe figlia? Perché o perché no?
  7. Puoi assegnare un valore a un attributo privato al di fuori della classe in cui è stato creato? Perché o perché no?
  8. È possibile accedere a un metodo protetto al di fuori della classe in cui è stato creato? Perché o perché no?

Risposte:

  1. Il modificatore di accesso predefinito in PHP è public.
  2. È possibile accedere a un metodo o attributo privato in PHP solo all'interno della classe in cui è stato creato, mentre è possibile accedere a un metodo o attributo protetto all'interno della classe in cui è stato creato, nonché nelle classi che ereditano da tale classe.
abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

4. Il modificatore di accesso finale può essere applicato a classi, metodi e proprietà. Viene utilizzato per impedire l'estensione di una classe o l'override di un metodo.
5. No, non possiamo creare un oggetto di una classe astratta perché una classe astratta funge da modello per altre classi e non ha un costruttore per creare un oggetto.
6. No, non possiamo sovrascrivere un metodo final in una classe figlia poiché è contrassegnato come final e non può essere sovrascritto.
7. No, non possiamo fornire un valore a un attributo privato al di fuori della classe che lo ha generato poiché l'attributo è disponibile solo all'interno della classe.
8. No, un metodo protetto non può essere accessibile al di fuori della classe che lo ha creato, ma può essere accessibile dalle classi che derivano da quella classe.

Costruttori e distruttori in PHP
Ereditarietà in PHP OOP
en English
X
Scorrere fino a Top