Serialização de objetos no PHP
Algo que eu gosto muito no PHP são os metodos magicos, e dois que eu recentemente aprendi foram os metodos __sleep e __wakeup, que são extremamente uteis para se trabalhar com serialização de objetos.
Vou demostrar abaixo como usar estes metodos e recomendo fortemente que eles sejam testados, para vocês realmente ver como estes metodos funcionam.
protected $fabricante;
public $modelos;
public function __construct( $fabricante ) {
$this->fabricante = $fabricante;
$this->ObtemModelos();
}
private function ObtemModelos() {
switch ($this->fabricante) {
case ‘Fiat’:
$this->modelos = array(‘Palio’, ‘Stylo’, ‘Linea’);
break;
case ‘Ford’:
$this->modelos = array(‘KA’, ‘Fiesta’, ‘Focus’);
break;
default:
$this->modelos = array();
break;
}
}
/**
* Metodo que será chamado na serialização do objeto
* Este metodo deve retornar um array com os nomes dos campos que serão guardados
* @return array
*/
public function __sleep() {
return array( ‘fabricante’ );
}
/**
* Metodo que será chamado quando formos reconstruir o objeto atraves de sua versão serializada
*/
public function __wakeup() {
$this->ObtemModelos();
}
}
// Instancia um novo objeto
$carros = new Automovel(‘Fiat’);
var_dump( $carros->modelos );
// Serializa o objeto
$teste = serialize( $carros );
var_dump( $teste );
// Retorna o objeto ao seu estado atraves de sua serialização
$carros2 = unserialize( $teste );
var_dump( $carros2->modelos ) ;
Pelo codigo acima da pra notar que são metodos muito simples, mas que são de uma utilidade imensa. Uma aplicação simples disso seria em formularios multi-paginas ou então para Ajax.
Referências: http://www.php.net/manual/en/language.oop5.magic.php
Ótimo exemplo! Este tipo de problema é muito útil para solucionar problemas de “persistência” de resources do PHP, tipo um objeto de conexão mysqli, por exemplo. Se puder colocar algum exemplo do tipo também seria ótimo!!
Vlw!