Omaduste hankimine maagia abil OOP-s PHP-s

Järgmine maagiline meetod, mida me vaatame, on __get. See meetod käivitub, kui proovite lugeda private või protected omaduse väärtust.

Kui rakendada meetod __get mõnes klassis, siis kõik pöördumised olematute või peidetud omaduste poole töödeldakse selle meetodi abil.

Samal ajal edastab PHP automaatselt taotletud omaduse nime selle meetodi esimese parameetrina ja selle meetodi poolt tagastatud väärtust võetakse kui omaduse väärtust, mille poole pöörduti.

Tõenäoliselt pole veel väga selge, kuidas see töötab, nii et vaatame praktilist näidet. Oletame, et meil on selline klass Test private ja public omadustega:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // avalik omadus
    private $prop2 = 2; // private omadus
  }
?>

Lisame oma klassi maagilise meetodi __get, mis alguses lihtsalt tagastab omaduse nime, mille poole pöörduti:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // lihtsalt tagastame omaduse nime
    }
  }
?>

Kontrollime loodud maagilise meetodi tööd. Pöördume kolme tüüpi omaduste poole: avaliku omaduse, private omaduse ja olematu omaduse poole:

index.php<?php
  $test = new Test;
  
  // Pöördume avaliku omaduse poole:
  echo $test->prop1; // väljastab 1 - see tähendab omaduse väärtuse
  
  // Pöördume private omaduse poole:
  echo $test->prop2; // väljastab 'prop2' - omaduse nimi
  
  // Pöördume olematu omaduse poole:
  echo $test->prop3; // väljastab 'prop3' - omaduse nimi
?>

Nagu näete, reageerib meie maagiline meetod pöördumistele private ja olematute omaduste poole, kuid ignoreerib pöördumisi avalike omaduste poole - need töötavad nii, nagu nad varem töötasid.