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
-
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
AI na dosah ruky: Jak je to s AI v osobních zařízeních?
22. ledna 2024 -
Vlastní web: Jak nainstalovat WordPress?
24. června 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024