OOP v PHP: Magické metody
Magické metody umožňují programátorovi přenést na PHP starost o některé speciální a jiným způsobem těžko proveditelné úkoly, nezbytné při práci s OOP.
Mezi magické metody patří také speciální metody a metody __toString(), __sleep(), __wakeup() a __set_state().
Metoda __toString() je volána automaticky, když používáme funkci echo nebo print k vypsání proměnné, k níž byla přiřazena instance třídy. Příklad:
<?php class UzitiToString{ private $vlastnost; public function __construct($vlastnost){ $this->vlastnost = $vlastnost; } public function __toString(){ return $this->vlastnost; } } $ins = new UzitiToString('toString'); echo $ins; ?>
Metoda __toString() se používá především při ladění a v praxi ji můžete využít například pro zjišťování, zda dotaz na databázi nějaké řádky vrátil nebo upravil.
Ve verzi 5.1 přibyla do PHP nová magická metoda __set_state(), kterou použijete v souvislosti s funkcí var_export(). Tato funkce je velmi podobná ladícím funkcím var_dump() a print_r(), které vypisují informace o proměnné. Narozdíl od nich však var_export() vrací validní PHP kód:
<?php $pole = array(1, 2, 3); var_export($pole); ?>
Tento skript vypíše následující:
array ( 0 => 1, 1 => 2, 2 => 3, )
Vše funguje správně, dokud není jedním z parametrů pole objekt. Pak totiž PHP nevrátí validní kód. Místo toho vrátí něco podobného:
array ( 0 => class myclass { var $myProperty = 'myValue'; }, );
To je samozřejmě nesmysl, proto byla do PHP zavedena statická magická metoda __set_state(), která je volána automaticky při aplikaci var_export() na objekt. Metoda přijímá pole atributů:
<?php class Trida { private $atribut; public $atribut2 = 3; public function __construct($atribut){ $this->atribut = $atribut; } public static function __set_state(array $args){ $inst = new self($args['atribut']); $inst->atribut2 = $args['atribut2']; return $ins; } } $obj = new Trida('hodnota'); var_export($obj); ?>
Díky magické metodě __set_state() lze s funkcí var_export() pracovat, i když jí předáte objekt.
Metody __sleep() a __wakeup() se používají při procesu serializace. Serializace převede do byte řetězce proměnné objektu. O metodách __sleep() a __wakeup() vyšel dostatečně podrobný článek PHP pro pokročilé – znovu třídy a objekty a jelikož se tyto metody používají méně často, bylo by zbytečné psát článek podobný.
Pozn. red.: Zdůrazňujeme, že tento text se týká PHP 5.
Mohlo by vás také zajímat
-
Fandíme českým sportovcům a rozdáváme hosting ZDARMA!
26. července 2024 -
Členská sekce: 4 důvody proč ji mít na svém webu
12. března 2024 -
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024
Nejnovější
-
-
-
LAMP VPS: Rychlé a efektivní nasazení webových aplikací
6. února 2025 -
OpenAI zpřístupnilo ChatGPT Search všem uživatelům
6. února 2025