⊗ppOpMgGP 88 of 107 menu

Získávání vlastností pomocí magie v OOP v PHP

Další magická metoda, kterou si rozebereme, se jmenuje __get. Tato metoda se aktivuje při pokusu o čtení hodnoty privátní nebo chráněné vlastnosti.

Pokud je metoda __get implementována v nějaké třídě, pak všechny pokusy o přístup k neexistujícím nebo skrytým vlastnostem budou zpracovány touto metodou.

PHP automaticky předá název požadované vlastnosti jako první parametr této metody, a vrácená hodnota této metody bude interpretována jako hodnota vlastnosti, ke které došlo k pokusu o přístup.

Nejspíš zatím není úplně jasné, jak to funguje, proto se podívejme na praktický příklad. Mějme následující třídu Test s privátní a veřejnou vlastností:

<?php class Test { public $prop1 = 1; // veřejná vlastnost private $prop2 = 2; // privátní vlastnost } ?>

Nyní přidejme do naší třídy magickou metodu __get, která pro začátek bude jednoduše vracet název vlastnosti, ke které došlo k přístupu:

<?php class Test { public $prop1 = 1; private $prop2 = 2; public function __get($property) { return $property; // jednoduše vrátíme název vlastnosti } } ?>

Ověřme si fungování vytvořené magické metody. Pokusme se přistoupit ke třem typům vlastností: k veřejné vlastnosti, k privátní a k neexistující:

<?php $test = new Test; // Přistupujeme k veřejné vlastnosti: echo $test->prop1; // vypíše 1 - tedy hodnotu vlastnosti // Přistupujeme k privátní vlastnosti: echo $test->prop2; // vypíše 'prop2' - název vlastnosti // Přistupujeme k neexistující vlastnosti: echo $test->prop3; // vypíše 'prop3' - název vlastnosti ?>

Jak vidíte, naše magická metoda reaguje na přístup k privátním a neexistujícím vlastnostem, ale ignoruje přístup k veřejným - ty fungují tak, jako fungovaly dříve.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout