Modificatori de acces în PHP

Constructori și destructori în PHP
Moștenirea în PHP OOP

În PHP, modificatorii de acces sunt o parte importantă a programarii orientate pe obiecte (OOP). Acestea specifică domeniul de aplicare al variabilelor sau metodelor de clasă și cum pot fi accesate. În această postare, vom analiza diferitele tipuri de modificatori de acces în PHP și vom oferi exemple despre cum să le folosim.

Tipuri de modificatori de acces în PHP

În PHP, modificatorii de acces sunt clasificați ca publici, privați sau protejați.

  • Public: o metodă sau un atribut care este setat la public poate fi accesat oriunde. Acesta este modificatorul de acces implicit în PHP.
  • Privat: o metodă sau un atribut care este setat la privat poate fi accesat numai în cadrul clasei în care este creat.
  • Protejat: O metodă sau un atribut care este setat la protejat poate fi accesat în cadrul clasei în care este creat, precum și în clasele care moștenesc din acea clasă.

Exemple

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

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

În exemplul de mai sus, definim o clasă „Persoană” cu trei atribute, fiecare cu un modificator de acces separat. Atributul „nume” este public, atributul „vârstă” este protejat, iar atributul „înălțime” este privat. Când încercăm să accesăm atributul „nume” în afara clasei și să îi adăugăm o valoare, totul funcționează bine. Cu toate acestea, încercarea de a adăuga valori proprietăților „vârstă” și „înălțime” în afara clasei are ca rezultat o eroare fatală.

Metode publice, private și protejate

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

În exemplul de mai sus, construim o clasă „Persoană” cu trei metode, fiecare cu un modificator de acces separat. Metoda „set name” este publică, metoda „set age” este protejată, iar metoda „set height” este privată. Când încercăm să invocăm funcția „set name” din afara clasei, funcționează bine. Când încercăm să apelăm metodele „set age” și „set height” din afara clasei, obținem o eroare fatală.

Modificatori de acces avansati: abstract și final

PHP oferă modificatori de acces sofisticați denumiți „abstract” și „final” în plus față de modificatorii de acces obișnuiți.

  • Un modificator de acces abstract poate fi folosit numai pe clase și metode. Este folosit pentru a construi un plan de clasă, totuși clasa nu poate fi instanțiată. Metodele abstracte sunt metode pe care fiecare clasă care moștenește din clasa abstractă trebuie să le implementeze.
  • Clasele, metodele și proprietățile pot primi un modificator de acces final. Este folosit pentru a interzice extinderea sau suprascrierea unei clase sau metode.

Exemple

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();

În exemplul de mai sus, construim un abstract clasa numită „Bicicletă” care are o funcție abstractă numită „drive()”. Apoi construim o nouă clasă numită „Poliție”, care extinde clasa „Bicicletă” și implementează funcția „drive()”. În schimb, folosim clasa „Poliție”, deoarece nu putem construi un obiect din clasa abstractă.

În cele din urmă, modificatorii de acces sunt o parte importantă a OOP în PHP și sunt utilizați pentru a limita domeniul de aplicare al variabilelor sau funcțiilor de clasă. Înțelegerea și utilizarea eficientă a modificatorilor de acces vă poate ajuta să dezvoltați un cod mai sigur și mai ușor de întreținut.

Q & A

Î: Ce sunt modificatorii de acces?
R: Modificatorii de acces definesc domeniul de aplicare al variabilelor sau metodelor de clasă, precum și unde pot fi accesate. În PHP, modificatorii de acces sunt clasificați ca publici, privați sau protejați.

Î: Care este modificatorul de acces implicit?
R: Modificatorul de acces implicit al PHP este public. Dacă nu furnizați modificatorul de acces în timp ce creați o metodă sau un atribut într-o clasă PHP, acesta este setat la public în mod implicit.

Î: Care este diferența dintre modificatorii de acces privat și protejat?
R: O metodă sau un atribut privat poate fi accesibil numai în cadrul clasei care a generat-o, dar o metodă sau un atribut protejat poate fi accesat în cadrul clasei care l-a creat, precum și în clasele care au moștenit din acea clasă.

Î: Puteți da un exemplu de utilizare a unui modificator de acces abstract în PHP?

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

În exemplul de mai sus, construim o clasă abstractă numită „Bicicletă” care are o funcție abstractă numită „drive()”. Apoi construim o nouă clasă numită „Poliție”, care extinde clasa „Bicicletă” și implementează funcția „drive()”. În schimb, folosim clasa „Poliție”, deoarece nu putem construi un obiect din clasa abstractă.

Î: Cum funcționează modificatorul de acces final?
R: Modificatorul de acces final poate fi aplicat claselor, metodelor și proprietăților. Este folosit pentru a preveni extinderea unei clase sau înlocuirea unei metode. Aceasta înseamnă că orice clasă care moștenește de la o clasă finală nu poate fi extinsă, iar orice metodă care este marcată ca finală nu poate fi suprascrisă.

Exerciții:

  1. Care este modificatorul de acces implicit în PHP?
  2. Care este diferența dintre modificatorii de acces privat și protejat în PHP?
  3. Dați un exemplu de utilizare a unui modificator de acces abstract în PHP.
  4. Cum funcționează modificatorul de acces final?
  5. Puteți crea un obiect dintr-o clasă abstractă? De ce sau de ce nu?
  6. Puteți suprascrie o metodă finală într-o clasă pentru copii? De ce sau de ce nu?
  7. Puteți atribui o valoare unui atribut privat în afara clasei în care este creat? De ce sau de ce nu?
  8. Poate fi accesată o metodă protejată în afara clasei în care este creată? De ce sau de ce nu?

Răspunsuri:

  1. Modificatorul de acces implicit în PHP este public.
  2. O metodă sau un atribut privat în PHP poate fi accesat numai în cadrul clasei în care este creat, în timp ce o metodă sau un atribut protejat poate fi accesat în cadrul clasei în care este creat, precum și în clasele care moștenesc din acea clasă.
abstract class Bike {
    private $maxSpeed = 80;
    abstract public function drive();
}
class Police extends Bike {
    public function drive() {
        return "Driving out of speed limit.";
    }
}

4. Modificatorul de acces final poate fi aplicat claselor, metodelor și proprietăților. Este folosit pentru a preveni extinderea unei clase sau înlocuirea unei metode.
5. Nu, nu putem crea un obiect dintr-o clasă abstractă deoarece o clasă abstractă servește ca model pentru alte clase și nu are un constructor pentru a crea un obiect.
6. Nu, nu putem suprascrie o metodă finală într-o clasă copil, deoarece este marcată ca finală și nu poate fi înlocuită.
7. Nu, nu putem oferi o valoare unui atribut privat în afara clasei care l-a generat, deoarece atributul este disponibil numai în cadrul clasei.
8. Nu, o metodă protejată nu poate fi accesibilă în afara clasei care a creat-o, dar poate fi accesată de clasele care derivă din acea clasă.

Constructori și destructori în PHP
Moștenirea în PHP OOP
închide

Rămâneți la curent cu PHP!

Nu trimitem spam!

en English
X
Derulaţi în sus