Získavanie vlastností pomocou magie v OOP v PHP

Ďalšia magická metóda, ktorú si rozoberieme, sa volá __get. Táto metóda sa aktivuje pri pokuse o čítanie hodnoty súkromnej alebo chránenej vlastnosti.

Ak implementujete metódu __get v nejakej triede, všetky prístupy k neexistujúcim alebo skrytým vlastnostiam budú spracované touto metódou.

PHP automaticky prenesie názov požadovanej vlastnosti do prvého parametra tejto metódy a vrátená hodnota tejto metódy bude považovaná za hodnotu vlastnosti, ku ktorej došlo k prístupu.

Pravdepodobne zatiaľ nie je veľmi jasné, ako to funguje, tak sa pozrime na praktický príklad. Majme nasledujúcu triedu Test so súkromnou a verejnou vlastnosťou:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // verejná vlastnosť
    private $prop2 = 2; // súkromná vlastnosť
  }
?>

Pridajme do našej triedy magickú metódu __get, ktorá na začiatok bude jednoducho vracať názov vlastnosti, ku ktorej došlo k prístupu:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // jednoducho vráťme názov vlastnosti
    }
  }
?>

Overme si fungovanie vytvorenej magickej metódy. Pristúpme k trom typom vlastností: k verejnej vlastnosti, k súkromnej a k neexistujúcej:

index.php<?php
  $test = new Test;
  
  // Pristupujeme k verejnej vlastnosti:
  echo $test->prop1; // vypíše 1 - teda hodnotu vlastnosti
  
  // Pristupujeme k súkromnej vlastnosti:
  echo $test->prop2; // vypíše 'prop2' - názov vlastnosti
  
  // Pristupujeme k neexistujúcej vlastnosti:
  echo $test->prop3; // vypíše 'prop3' - názov vlastnosti
?>

Ako vidíte, naša magická metóda reaguje na prístup k súkromným a neexistujúcim vlastnostiam, ale ignoruje prístup k verejným - tie fungujú tak, ako fungovali predtým.