Anda di halaman 1dari 4

Ateno, este um post gratuito publicado no site da Devmedia e publicado no Slideshare na conta da prpria Devmedia. Sua republicao no autorizada.

a. Para ler este e outros artigos de seu interesse, acesse http://www.devmedia.com.br

Serializao de dados em PHP


Veja neste artigo um conceito de serializao e como usa-la com PHP atravs de um exemplo simples e prtico. Basicamente o processo de salvar dados de um objeto, mas no obrigatoriamente um objeto, em algum lugar ou transmiti-lo pela rede, num formato binrio eu de texto. Sendo que esses bytes podero ser utilizados para reconstruir perfeitamente o que foi serializado.

O que Serializao de dados?


Basicamente o processo de salvar dados de um objeto, mas no obrigatoriamente um objeto, em algum lugar ou transmiti-lo pela rede, num formato binrio eu de texto. Sendo que esses bytes podero 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 no 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 Serializao no coisa nova no e muito menos exclusivo do PHP. No PHP ela feita de forma extremamente simples, usamos o mtodo serialize() que recebe o que deve ser serializado. Vejam: Listagem 01: Serializando

1<?php 2$array = array( "a","b","c","d","e" ); 3$serializado = serialize($array); 4echo $serializado; 5//resultado a:5:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;s:1:"d";i:4;s:1:"e";} 6
?>

Lembrando que no podemos serializar recursos, ou seja, arquivos, conexo como banco de dados, etc. E que tudo que voc coloca numa varivel de sesso serializado automaticamente.

Restaurando os Dados
Para restaurar os dados serializados usamos a funo 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

1
<?php

2 3 4
$array = unserialize($serialziado); var_dump($array);

$serialziado = 'a:5:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;s:1:"d";i:4;s:1:"e";}';

5 /* 6 array(5) { 7 8 9 10 11 12
*/ [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(1) "e" }

13 14

?>

Caso a string passada no seja uma string serializada o mtodo retornar falsee um E_NOTICE.

Serializao de objetos
Bem, ns j serializamos e restauramos um array e com objetos o processo exatamente o mesmo porem pode fazer uso de dois mtodos muito teis, __sleep() e __wakeup().

__sleep(): invocado quando um objeto serializado, ou seja, no momento da execuo 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 varivel para a sesso. __wakeup(): faz o contrario de __sleep(), ele invocado quando estamos restaurando um objeto por meio de unserialize() ou quando chamamos uma varivel de sesso. Usamos para setar valores padres para quando restauramos os dados. Vejamos na Listagem 03 o uso desses dois mtodos construindo uma classe Jogador. Listagem 03: Implementando __sleep() e __wakeup()

1 2 <?php 3 4 5
private $hp; //arquivo jogador.php class Jogador { private $nome;

6 7 8 9 10 11 12 13 14 15 16

private $score; public function __construct($nome){ $this->nome = $nome; $this->hp = 100;

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

17
public function __wakeup(){

18 19 20} 21?> 22
}

$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 contedo e ento 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 persistncia e leitura em arquivo na Listagem 04. Listagem 04: Salvando e lendo dados em arquivo

1 2 3 4
$jogador = new Jogador("Allan"); <?php //serializaFile.php include_once 'jogador.php';

5 6

$jogador->setHp(1); $jogador->setScore(1500);

7 $serializado = serialize($jogador); 8 file_put_contents("jogo.save",$serializado); 9 echo ("jogo salvo!"); 10?> 11 12 13


$dados = file_get_contents("jogo.save"); <?php //restauraFile.php include 'jogador.php';

14 15

$jogador = unserialize($dados);

echo " nome ".$jogador->getNome()." score ".$jogador->getScore()." hp ".$jogador->ge

16?> 17
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 prxima.

Leia mais em: Serializao de dados em PHP http://www.devmedia.com.br/serializacao-de-dadosem-php/25224#ixzz25gtqLqr0

Anda mungkin juga menyukai