Obținerea proprietăților prin magie în OOP în PHP
Următoarea metodă magică pe care
o vom analiza se numește __get. Această
metodă se activează la încercarea de a citi valoarea
unei proprietăți private sau protejate.
Dacă implementăm metoda __get într-o clasă,
toate accesările la proprietăți inexistente
sau ascunse vor fi gestionate
de această metodă.
În acest caz, PHP va transmite automat numele proprietății solicitate în primul parametru al acestei metode, iar valoarea returnată de această metodă va fi percepută ca valoarea proprietății la care s-a făcut accesarea.
Probabil încă nu este foarte clar cum funcționează acest lucru,
așa că să analizăm un exemplu practic.
Să presupunem că avem următoarea clasă
Test cu proprietăți private și publice:
<?php
class Test
{
public $prop1 = 1; // proprietate publică
private $prop2 = 2; // proprietate privată
}
?>
Să adăugăm în clasa noastră metoda magică
__get, care pentru început va doar
returna numele proprietății la care s-a făcut
accesarea:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // doar returnăm numele proprietății
}
}
?>
Să verificăm funcționarea metodei magice create. Accesăm trei tipuri de proprietăți: o proprietate publică, una privată și una inexistentă:
<?php
$test = new Test;
// Accesăm proprietatea publică:
echo $test->prop1; // va afișa 1 - adică valoarea proprietății
// Accesăm proprietatea privată:
echo $test->prop2; // va afișa 'prop2' - numele proprietății
// Accesăm proprietatea inexistentă:
echo $test->prop3; // va afișa 'prop3' - numele proprietății
?>
După cum vedeți, metoda noastră magică reacționează la accesarea proprietăților private și inexistente, dar ignoră accesarea la cele publice - acestea funcționează așa cum au funcționat întotdeauna.