Serialização de dados em PHP

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

Veja neste artigo um conceito de serialização e como usa-la com PHP através de um exemplo simples e prático. Basicamente é o processo de salvar dados de um objeto, mas não obrigatoriamente um objeto, em algum lugar ou transmiti-lo pela rede, num formato binário eu de texto. Sendo que esses bytes poderão ser utilizados para reconstruir perfeitamente o que foi serializado.

O que é Serialização de dados?

Basicamente é o processo de salvar dados de um objeto, mas não obrigatoriamente um objeto, em algum lugar ou transmiti-lo pela rede, num formato binário eu de texto. Sendo que esses bytes poderão ser utilizados para reconstruir perfeitamente o que foi serializado.

Um exemplo muito claro disso, que muitos usam, pois é muito bom, é que quando você está jogando um joginho e precisa fazer uma parada, mas não quer perder o estado do jogo, o que você faz? Salva (“serializa”) em algum lugar para depois carregar (“deserializa”) o jogo e tudo volta de onde parou.

Serializando no PHP

Primeiro quero dizer que a Serialização não é coisa nova não e muito menos exclusivo do PHP.

No PHP ela é feita de forma extremamente simples, usamos o método serialize() que recebe o que deve ser serializado. Vejam:

Listagem 01: Serializando


Lembrando que não podemos serializar recursos, ou seja, arquivos, conexão como banco de dados, etc. E que tudo que você coloca numa variável de sessão é serializado automaticamente.

Restaurando os Dados

Para restaurar os dados serializados usamos a função unserialize() que recebe o dado serializado, interpreta a string e traz de volta o que foi serializado. Vejam como ficaria para o exemplo da Listagem 01:

Listagem 02: Restaurando os dados

 string(1) "a" 
	[1]=> string(1) "b" 
	[2]=> string(1) "c" 
	[3]=> string(1) "d" 
	[4]=> string(1) "e" 
	}
*/
?>

Caso a string passada não seja uma string serializada o método retornará falsee um E_NOTICE.

Serialização de objetos

Bem, nós já serializamos e restauramos um array e com objetos o processo é exatamente o mesmo porem pode fazer uso de dois métodos muito úteis, __sleep() e __wakeup().

  • __sleep(): é invocado quando um objeto é serializado, ou seja, no momento da execução de serialize(), usamos ele para informar quais dados devem ser serializados, para isso devemos retornar um array com o nome dos campos que devem ser serializados. Lembrando que ele será executado tanto quando usamos serialize() diretamente ou quando enviamos uma variável para a sessão.
  • __wakeup(): faz o contrario de __sleep(), ele é invocado quando estamos restaurando um objeto por meio de unserialize() ou quando chamamos uma variável de sessão. Usamos para setar valores padrões para quando restauramos os dados.

Vejamos na Listagem 03 o uso desses dois métodos construindo uma classe Jogador.

Listagem 03: Implementando __sleep() e __wakeup()

nome = $nome;
		$this->hp   = 100;
		$this->score = 0; 
	}	
	/* get's e set's aqui */	
	public function __sleep(){		
		return array(		
			"nome","score"		
		);		
	}	
	public function __wakeup(){		
		$this->hp = 100;		
	}	
}
?> 

Dissemos aqui ao PHP para serializar apenas o nome e o score do jogador e que quando restaurarmos o hp deve ser igual a 100.

Salvando e Lendo de arquivos

Uma forma de persistir os dados serializados é salvar em um arquivo para isso podemos usar file_put_contents() que recebe o nome do arquivo e o conteúdo e então a partir de um arquivo gravado podemos lê-lo, com file_get_contents(), e restaurar os dados. Vamos aproveitar a classe criada na Listagem 03 para demonstrar a persistência e leitura em arquivo na Listagem 04.

Listagem 04: Salvando e lendo dados em arquivo

setHp(1);
$jogador->setScore(1500);
$serializado = serialize($jogador);
file_put_contents("jogo.save",$serializado);
echo ("jogo salvo!");
?>
getNome()." score ".$jogador->getScore()." hp ".$jogador->getHp();
?> 

O que é feito aqui é muito simples, em serializaFile.php criamos um novo jogador e setamos alguns valores para ele e salvamos no arquivo jogo.save enquanto em restauraFile.php realizamos a leitura do arquivo e restauramos o objeto serializado.

Bem pessoal fico por aqui espero que tenham gostado, cometem, compartilhem e até a próxima.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?