Savybių gavimas per magiją OOP PHP

Kitas magiškas metodas, kurį nagrinėsime, vadinamas __get. Šis metodas suveikia bandant perskaityti reikšmę iš privacios arba apsaugotos savybės.

Jeigu klasėje realizuotas metodas __get, tai visos kreipimaisi į neegzistuojančias ar paslėptas savybes bus apdorojamos šiuo metodu.

Tuomet PHP automatiškai perduos užklaustos savybės pavadinimą į pirmąjį parametrą šio metodo, o šio metodo grąžinta reikšmė bus priimta kaip savybės, į kurią buvo kreiptasi, reikšmė.

Greičiausiai kol kas nelabai aišku, kaip tai veikia, todėl pažiūrėkime praktiniu pavyzdžiu. Tarkime, kad turime tokią Test klasę su privacia ir vieša savybėmis:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // vieša savybė
    private $prop2 = 2; // privati savybė
  }
?>

Į savo klasę pridėkime magiškąjį metodą __get, kuris iš pradžių tiesiog grąžins savybės, į kurią buvo kreiptasi, pavadinimą:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // tiesiog grąžinsime savybės pavadinimą
    }
  }
?>

Patikrinkime sukurtų magiškųjų metodų veikimą. Kreipkimės į tris savybių tipus: į viešą savybę, į privatų ir į neegzistuojančią:

index.php<?php
  $test = new Test;
  
  // Kreipiamės į viešą savybę:
  echo $test->prop1; // išves 1 - tai yra savybės reikšmė
  
  // Kreipiamės į privatų savybę:
  echo $test->prop2; // išves 'prop2' - savybės pavadinimas
  
  // Kreipiamės į neegzistuojančią savybę:
  echo $test->prop3; // išves 'prop3' - savybės pavadinimas
?>

Kaip matote, mūsų magiškas metodas reaguoja į kreipimąsi į privacias ir neegzistuojančias savybes, bet ignoruoja kreipimąsi į viešas - jos veikia taip, kaip ir veikė anksčiau.