MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Modificatori de acces

Cu ajutorul modificatorilor speciali, putem stabili domeniul de vizibilitate pentru proprietățile și metodele unei clase. În PHP, există trei astfel de modificatori:

  • public: proprietățile și metodele declarate cu acest modificator pot fi accesate din codul extern și din orice parte a programului
  • protected: proprietățile și metodele cu acest modificator sunt accesibile din clasa curentă și din clasele derivate
  • private: proprietățile și metodele cu acest modificator sunt accesibile doar din clasa curentă

Să luăm un exemplu. De exemplu, avem următoarea clasă:

class Person
{
   private $privateA ="private";
   public  $publicA = "public";
   protected $protectedA = "protected";
   
   private function getPrivateMethod()
   {
       echo "metodă privată <br />";
   }
     
   protected function getProtectedMethod()
   {
       echo "metodă protejată <br />";
   }
     
   public function getPublicMethod()
   {
       echo "metodă publică <br />";
   }
   function test()
   {
       $this->getPrivateMethod();
       $this->getProtectedMethod();
       $this->getPublicMethod();
       
       echo "$this->privateA <br />";
       echo "$this->protectedA <br />";
       echo "$this->publicA <br />";
   }
}

Clasa definește trei proprietăți și trei metode cu diferiți modificatori de acces. Din orice metodă a acestei clase, putem accesa orice metodă și orice proprietate. Dacă metoda nu are un modificator de acces, vizibilitatea sa implicită este public.

Acum să creăm o clasă derivată din clasa Person:

class Employee extends Person
{
   function test()
   {
       // echo $this->privateA; // nu este permis, deoarece privateA este private în clasa părinte
       echo $this->protectedA;
       echo $this->publicA;
       // $this->getPrivateMethod(); // nu este permis, deoarece este private în clasa părinte
       $this->getProtectedMethod();
       $this->getPublicMethod();
   }
}

Clasa derivată are acces la toate proprietățile și metodele cu modificatorii public și protected, dar nu are acces la metodele și proprietățile cu modificatorul private.

Acum să vedem utilizarea clasei Person din codul extern:

$person = new Person;
// $person->getPrivateMethod(); // nu este accesibil, deoarece este private
// $person->getProtectedMethod(); // nu este accesibil, deoarece este protected
$person->getPublicMethod();
// echo $person->privateA; // nu este accesibil, deoarece este private
// echo $person->protectedA; // nu este accesibil, deoarece este protected
echo $person->publicA;

La utilizarea obiectelor acestei clase, avem acces doar la metodele și proprietățile publice, iar proprietățile și metodele cu modificatorii private și protected nu sunt accesibile.

Accesul la metodele și proprietățile obiectului

Este de menționat că în PHP, într-o clasă, putem accesa variabilele și metodele cu modificatorii private și protected ale unui obiect al aceleiași clase:

class Account{
   
   private $sum = 0;
   function __construct($sum){
       
       $this->sum = $sum;
   }
   function getSumFrom($otherAccount, $money){
       
       $otherAccount->sum -= $money;
       $this->sum += $money;
   }
   function printSum(){
       echo "În cont sunt $this->sum unități.<br>";
   }
}
$acc1 = new Account(100);
$acc2 = new Account(400);

$acc1->getSumFrom($acc2, 200);
$acc1->printSum();    // În cont sunt 300 unități.

Clasa Account reprezintă o clasă ipotetică de cont bancar. În variabila privată $sum se stochează suma din cont.

În metoda getSumFrom, ca parametru primim un obiect al aceleiași clase Account și suma transferului. Și, deoarece obiectul reprezintă aceeași clasă Account, putem accesa proprietățile și metodele sale cu modificatorii private și protected:

$otherAccount->sum -= $money;

Și astfel, putem efectua un transfer ipotetic de bani de la un cont la altul.

← Lecția anterioară Lecția următoare →