Modificatori di accesso in PHP

A
Costruttore e distruttore in PHP
Ereditarietà in PHP OOP

Come altri linguaggi, anche PHP implementa un certo ambito per i metodi o gli attributi della classe. I modificatori di accesso definiscono dove è possibile accedere alle variabili di classe o ai metodi. In questo articolo imparerai a conoscere il modificatori di accesso in PHP OOP e loro tipi.

Tipi di modificatori di accesso in PHP

Ci sono tre modificatori di accesso in PHP.

Pubblico: quando crei un metodo o un attributo nella classe PHP e non specifichi il modificatore di accesso, viene impostato su pubblico per impostazione predefinita. In questa modalità, il metodo o l'attributo è accessibile ovunque.

Privato: quando crei un metodo o una variabile con un modificatore di accesso privato, è accessibile solo all'interno della classe in cui è stato creato.

Protetto: il metodo o l'attributo protetto è accessibile all'interno della classe in cui è stato creato. Inoltre, le classi derivate da questa classe possono essere un metodo e un attributo protetti.

Esempio

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

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

Spiegazione dell'esempio sopra

  • Nell'esempio sopra, creiamo una classe Persona con tre tipi di attributi con tre diversi tipi di modificatori di accesso.
  • L'attributo name è impostato su public. Considerando che, l'età e l'altezza sono impostate rispettivamente su protetto e privato.
  • Quando proviamo ad accedere al nome dell'attributo al di fuori della classe e ad assegnargli un valore, funziona bene.
  • Ma, quando proviamo ad assegnare un valore agli attributi età e altezza al di fuori della classe, si produce un errore fatale.

Quindi, dall'esempio sopra, hai una chiara comprensione dei modificatori di accesso in PHP. Esercitiamo i metodi.

Metodi pubblici, privati ​​e protetti in PHP

<?php
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('Jawad'); // OK
$person->set_age('26'); // ERROR
$person->set_height('5.4'); // ERROR
?>

Spiegazione dell'esempio sopra

  • Nell'esempio sopra, creiamo una classe Persona con tre tipi di metodi con tre diversi tipi di modificatori di accesso.
  • Il metodo name è impostato su public. Considerando che, l'età e l'altezza sono impostate rispettivamente su protetto e privato.
  • Quando proviamo ad accedere al nome del metodo al di fuori della classe e ad assegnargli un valore, funziona bene.
  • Ma, quando proviamo ad assegnare un valore ai metodi età e altezza al di fuori della classe, si produce un errore fatale.

Oltre a questi tre modificatori di accesso, abbiamo i modificatori di accesso Abstract e Final in PHP/. Nella sezione successiva, li imparerai con esempi.

Modificatore di accesso astratto in PHP

Il modificatore di accesso astratto può essere applicato solo alla classe e ai metodi. Non possiamo usare abstract con gli attributi di classe.

Una volta che usiamo abstract con la classe, il suo oggetto non può essere avviato perché non ha alcun costruttore.

Inoltre, ricorda, se non usi un modificatore di accesso astratto con la classe e dichiari un metodo astratto al suo interno. La classe diventa astratta nel suo insieme.

Per esempio

<?php

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, creiamo una classe astratta Bike che contiene un metodo astratto drive().
  • Creiamo un'altra classe che fornisce l'implementazione del drive del metodo astratto.
  • Poiché non possiamo creare oggetti della classe astratta, utilizziamo la classe Police.

Modificatore di accesso finale in PHP

Proprio come il modificatore di accesso astratto, non possiamo usare il modificatore di accesso finale in PHP con gli attributi della classe. Possiamo rendere la classe o i suoi metodi definitivi.

Una classe con una parola chiave finale non può essere ereditata dalle altre classi. Inoltre, il metodo con il modificatore di accesso finale non può essere sovrascritto dalle sottoclassi derivate da questa classe.

Ad esempio – Classe finale in PHP

<?php

final class ParentClass {

    final function msg1() {
        echo "Method 1 of final class";
    }

    function msg2() {
        echo "Method 2 of final class";
    }
}

$obj1 = new ParentClass();
$obj1->msg1();
$obj1->msg2();

?>
  • Nella classe sopra, creiamo un metodo finale msg1() e un metodo semplice msg2().
  • Non possiamo sovrascrivere il metodo finale msg1(). Tuttavia, i metodi msg2() possono essere sovrascritti dalla classe che lo eredita.
  • Prova a mettere in pratica questo problema creando una classe che estenda la classe Parent. Implementare entrambi i metodi e verificare quale metodo produce errori durante l'override.

Un altro esempio: metodo finale in PHP

<?php

class ParentClass {

    final function msg1() {
        echo "Final Method 1 of simple class";
    }

    function msg2() {
        echo "Simple method 2 of simple class";
    }
}

class ChildClass extends ParentClass {

    function msg1() {
        echo "Trying final method to override.";
    }

}

?>
  • Nell'esempio sopra, creiamo una classe non finale o semplice con due metodi. msg1() è un metodo finale e msg2() è semplice.
  • Creiamo una classe figlia che estende la classe genitore e proviamo a sovrascrivere il metodo finale msg1() della classe genitore.
  • Produrrà un errore fatale e non sarai in grado di sovrascrivere il metodo finale della classe genitore.

Costruttore e distruttore in PHP
Ereditarietà in PHP OOP

Aggiungi un commento

Rete di tutor

Condividi questo

Impara PHP dalla A alla Z