<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Serializando objetos - objetos em sessões</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Classes e Objetos(PHP 4)" HREF="language.oop.html"><LINK REL="PREVIOUS" TITLE="parent" HREF="keyword.parent.html"><LINK REL="NEXT" TITLE="As funções mágicas __sleep e __wakeup" HREF="language.oop.magic-functions.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="keyword.parent.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Capítulo 18. Classes e Objetos(PHP 4)</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.oop.magic-functions.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="language.oop.serialization" >Serializando objetos - objetos em sessões</A ></H1 ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > No PHP 3, objetos perdem suas associações entre classes através do processo de serialização e desserialização. A variável resultante é do tipo objeto, mas sem classe nem métodos, algo bem sem utilidade (de fato, ele se torna apenas um array com uma sintaxe engraçada). </P ></BLOCKQUOTE ></DIV ><DIV CLASS="caution" ><P ></P ><TABLE CLASS="caution" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >Cuidado</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > As informações seguintes se aplicam ao PHP > 4. </P ></TD ></TR ></TABLE ></DIV ><P > <A HREF="function.serialize.html" ><B CLASS="function" >serialize()</B ></A > retorna uma string contendo uma representação linear de qualquer valor que pode ser armazenado no PHP. <A HREF="function.unserialize.html" ><B CLASS="function" >unserialize()</B ></A > pode ser utilizado para recriar os valores da variável original. Usando serialize para salvar um objeto irá preservar todas as variáveis de um objeto. As funções de um objeto não serão salvas, apenas o nome da classe. </P ><P > Para ser possível fazer o <A HREF="function.unserialize.html" ><B CLASS="function" >unserialize()</B ></A > de um objeto, a classe do objeto precisa estar definida. Ou seja, se você tem um objeto <CODE CLASS="varname" >$a</CODE > da classe A em page1.php e o serializa, você consegue uma string que se refere a classe A e contém todos os valores de variáveis contidos em <CODE CLASS="varname" >$a</CODE >. Se você precisa desserializa-la em page2.php, recriando <CODE CLASS="varname" >$a</CODE > da classe A, a definição da classe A precisa estar presente na page2.php. Isto pode por ser feito, por exemplo, armazenando a definição da classe A em um arquivo separado, incluindo este arquivo e ambos os arquivos page1.php e page2.php. </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN5491" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// classe_a.inc.php:<br /><br /> </font><font color="#007700">class </font><font color="#0000BB">A </font><font color="#007700">{<br /> var </font><font color="#0000BB">$um </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">;<br /><br /> function </font><font color="#0000BB">mostre_um</font><font color="#007700">() {<br /> echo </font><font color="#0000BB">$this</font><font color="#007700">-></font><font color="#0000BB">um</font><font color="#007700">;<br /> }<br /> }<br /><br /></font><font color="#FF8000">// page1.php:<br /><br /> </font><font color="#007700">include(</font><font color="#DD0000">"classe_a.inc.php"</font><font color="#007700">);<br /><br /> </font><font color="#0000BB">$a </font><font color="#007700">= new </font><font color="#0000BB">A</font><font color="#007700">;<br /> </font><font color="#0000BB">$s </font><font color="#007700">= </font><font color="#0000BB">serialize</font><font color="#007700">(</font><font color="#0000BB">$a</font><font color="#007700">);<br /> </font><font color="#FF8000">// armazena $s em algum lugar que page2,php possa encontra-la<br /> </font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"armazenamento"</font><font color="#007700">, </font><font color="#DD0000">"w"</font><font color="#007700">);<br /> </font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">$s</font><font color="#007700">);<br /> </font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /><br /></font><font color="#FF8000">// page2.php:<br /><br /> // Isto e preciso para que unserialize funcione normalmente<br /> </font><font color="#007700">include(</font><font color="#DD0000">"classe_a.inc.php"</font><font color="#007700">);<br /><br /> </font><font color="#0000BB">$s </font><font color="#007700">= </font><font color="#0000BB">implode</font><font color="#007700">(</font><font color="#DD0000">""</font><font color="#007700">, @</font><font color="#0000BB">file</font><font color="#007700">(</font><font color="#DD0000">"armazenamento"</font><font color="#007700">));<br /> </font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#0000BB">unserialize</font><font color="#007700">(</font><font color="#0000BB">$s</font><font color="#007700">);<br /><br /> </font><font color="#FF8000">// Agora podemos usar a funcao mostre_um() do objeto $a<br /> </font><font color="#0000BB">$a</font><font color="#007700">-></font><font color="#0000BB">mostre_um</font><font color="#007700">();<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > Se você está utilizando sessões e usar <A HREF="function.session-register.html" ><B CLASS="function" >session_register()</B ></A > para registrar objetos, esses objetos serão serializados automaticamente no final de cada script PHP, e automaticamente desserializados em cada uma das páginas seguintes. Isto significa que esse objetos podem estar em qualquer uma de suas páginas desde que elas sejam parte de sua sessão. </P ><P > É extremamente recomendável que você inclua as definições de classe de todos os objetos registrados de todas as suas páginas, mesmo que você não use essas classes em todas as suas páginas. Se você não o fizer e um objeto for desserializado sem sua definição de classe presente, ele perde usa associação com a classe e se torna um objeto da classe <TT CLASS="literal" >stdClass</TT >, sem qualquer funções disponíveis. o que as deixa silenciosamente sem funcionalidade. </P ><P > Assim, se no exemplo acima <CODE CLASS="varname" >$a</CODE > se tornar parte de uma sessão pela utilização de <TT CLASS="literal" >session_register("a")</TT >, você precisa incluir o arquivo <TT CLASS="literal" >classe_a.inc.php</TT > em todos as suas páginas, não somente em page1.php e page2.php. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="keyword.parent.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="language.oop.magic-functions.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><TT CLASS="literal" >parent</TT ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.oop.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >As funções mágicas <TT CLASS="literal" >__sleep</TT > e <TT CLASS="literal" >__wakeup</TT ></TD ></TR ></TABLE ></DIV ></BODY ></HTML >