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:
<?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:
<?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:
<?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.