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.







