⊗ppOpMgSP 91 of 107 menu

Záznam vlastností pomocí magie v OOP v PHP

Magická metoda __set je volána při pokusu o změnu hodnoty neexistující nebo skryté vlastnosti. Jako parametry přijímá název vlastnosti a hodnotu, která se jí snaží přiřadit.

Podívejme se na praktickém příkladu. Předpokládejme, že máme danou tuto třídu Test:

<?php class Test { private $prop1; private $prop2; } ?>

Vytvořme v této třídě magickou metodu __set, která pomocí funkce var_dump vypíše název vlastnosti, ke které došlo k přístupu, a hodnotu, která se této vlastnosti snaží nastavit:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { var_dump($property . ' ' .$value); } } ?>

Ověřme fungování naší třídy:

<?php $test = new Test; $test->prop = 'value'; // var_dump metody __set vypíše 'prop value' ?>

Nyní zkusme nastavit hodnotu vlastnosti, jejíž název je uložen v proměnné $property:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; // nastavíme hodnotu } } ?>

Nyní můžeme zapisovat do privátních vlastností mimo třídu:

<?php $test = new Test; $test->prop1 = 1; // zapíšeme 1 $test->prop2 = 2; // zapíšeme 2 ?>

Zapisovat můžeme, ale ověřit, zda se tam něco zapsalo - ne, protože vlastnosti jsou privátní.

Lze vytvořit getter pro tyto vlastnosti nebo jednoduše použít magickou metodu __get. Použijme druhou variantu:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; } // Magický getter vlastností: public function __get($property) { return $this->$property; } } ?>

Nyní můžeme ověřit fungování naší třídy. Ověřme:

<?php $test = new Test; $test->prop1 = 1; // zapíšeme 1 $test->prop2 = 2; // zapíšeme 2 echo $test->prop1; // vypíše 1 echo $test->prop2; // vypíše 2 ?>

Samozřejmě, ve skutečnosti bychom neměli povolit všem zapisovat do privátních vlastností, jinak ztrácí smysl těchto privátních vlastností (jednodušší je udělat je veřejnými a hotovo).

Proto by se tato metoda měla používat pouze v případě, kdy je to skutečně nutné. V následujících lekcích ještě zvážíme příklady úspěšného použití.

Č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