mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
114 lines
3.9 KiB
XML
114 lines
3.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: f94d903985119d3ac00f4528551df947f57b667f Maintainer: fernandowobeto Status: ready --><!-- CREDITS: fabioluciano,ABDALAZARD,WilliamSampaio,fernandowobeto -->
|
|
<!-- TODO reescreva para remover o uso de "você" e fale sobre __serialize/_unserialize -->
|
|
<sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
|
|
<title>Serialização de Objetos</title>
|
|
<titleabbrev>Serialização de Objetos - Objetos em sessões</titleabbrev>
|
|
|
|
<para>
|
|
A função <function>serialize</function> retorna uma string contendo uma
|
|
representação byte-stream de qualquer valor que pode ser armazenado pelo
|
|
PHP. A função <function>unserialize</function> pode utilizar essa string para
|
|
recriar os valores originais da variável. Utilizar a serialização para
|
|
salvar um objeto, salvará todas as variáveis de um objeto. Os
|
|
métodos de um objeto não serão salvos, apenas o nome da
|
|
classe.
|
|
</para>
|
|
|
|
<para>
|
|
Para desserializar um objeto com a função <function>unserialize</function>, a
|
|
classe desse objeto precisa estar definida. Isto é, se possuir um objeto
|
|
da classe A e serializá-lo, você obterá
|
|
uma string que referencia a classe A e contêm todos os valores de variáveis
|
|
contidas nele. Se desejar deserializar este objeto
|
|
em outro arquivo, um objeto da classe A, a
|
|
definição da classe A deve estar presente neste arquivo.
|
|
Isso pode ser feito, por exemplo, armazenando a definição da classe A
|
|
em um arquivo, e incluí-lo, fazendo uso da função
|
|
<function>spl_autoload_register</function>.
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// A.php:
|
|
|
|
class A {
|
|
public $one = 1;
|
|
|
|
public function show_one() {
|
|
echo $this->one;
|
|
}
|
|
}
|
|
|
|
// page1.php:
|
|
|
|
include "A.php";
|
|
|
|
$a = new A;
|
|
$s = serialize($a);
|
|
// store $s somewhere where page2.php can find it.
|
|
file_put_contents('store', $s);
|
|
|
|
// page2.php:
|
|
|
|
// this is needed for the unserialize to work properly.
|
|
include "A.php";
|
|
|
|
$s = file_get_contents('store');
|
|
$a = unserialize($s);
|
|
|
|
// now use the function show_one() of the $a object.
|
|
$a->show_one();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>
|
|
É fortemente recomendado que, quando uma aplicação serializa seus objetos, para
|
|
uso posterior na aplicação, esta inclua a definição da classe
|
|
do objeto em questão ao longo de toda aplicação. Não fazer isso pode resultar em
|
|
objetos serem desserializados sem a definição da classe, que acarretará no
|
|
PHP entregar um objeto da classe <classname>__PHP_Incomplete_Class_Name</classname>,
|
|
que não possui métodos, tornando o objeto inútil.
|
|
</para>
|
|
|
|
<para>
|
|
Então, se, no exemplo anterior, <varname>$a</varname> se tornou parte da sessão
|
|
adicionando uma nova chave no array superglobal <varname>$_SESSION</varname>, você deve incluir o
|
|
arquivo <literal>A.php</literal> em todas suas páginas, e não somente em <filename>page1.php</filename>
|
|
e <filename>page2.php</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
Além dos conselhos acima, note que pode-se capturar os eventos de serialização
|
|
e desserialização de um objeto usando os métodos
|
|
<link linkend="object.sleep">__sleep()</link> e
|
|
<link linkend="object.wakeup">__wakeup()</link>. Usar
|
|
o método <link linkend="object.sleep">__sleep()</link> também lhe permitirá
|
|
serializar somente subconjuntos de propriedades de um objeto.
|
|
</para>
|
|
</sect1>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|