1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-25 16:02:13 +01:00
Files
archived-doc-es/language/oop5/serialization.xml
Pedro Antonio Gil Rodríguez a156120a83 Updated to the most recent version
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@330694 c90b9560-bf6c-de11-be94-00142212c4b1
2013-06-28 08:14:12 +00:00

123 lines
4.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1fc0b05670b5f6ad20e3a4aad30a491eca7a2659 Maintainer: chuso Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
<title>Serialización de objetos</title>
<title>serialización de objetos - objetos en sesiones</title>
<para>
La función <function>serialize</function> devuelve un string que contiene
un flujo de bytes que representa cualquier valor que se pueda almacenar
en PHP. Por otra parte, <function>unserialize</function> puede restaurar
los valores originales a partir de dicho string. Al utilizar serialize para
guardar un objeto, almacenará todas las variables de dicho objeto. En cambio
los métodos no se guardarán, sólo el nombre de la clase.
</para>
<para>
Para poder deserializar (<function>unserialize</function>) un objeto, debe
estar definida la clase de ese objeto. Es decir, si se tiene un objeto de la
clase A, y lo serializamos, se obtendrá un string que haga referencia a la clase A
y contenga todas las variables que haya en esta clase. Si se desea deseralizar en
otro fichero, antes debe estar presente la definición de la clase A. Esto se
puede hacer, por ejemplo, escribiendo la definición de la clase A en un fichero,
para después o bien incluirlo, o bien hacer uso de la función
<function>spl_autoload_register</function>.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// classa.inc:
class A {
public $one = 1;
public function show_one() {
echo $this->one;
}
}
// page1.php:
include("classa.inc");
$a = new A;
$s = serialize($a);
// almacenamos $s en algún lugar en el que page2.php puede encontrarlo.
file_put_contents('store', $s);
// page2.php:
// se necesita para que unserialize funcione correctamente.
include("classa.inc");
$s = file_get_contents('store');
$a = unserialize($s);
// now use the function show_one() of the $a object.
$a->show_one();
?>
]]>
</programlisting>
</informalexample>
<para>
Si una aplicación está usando sesiones, y utiliza
<function>session_register</function> para registrar objetos, estos objetos
se serializarán automáticamente al final de cada página PHP, y se deserializan
también automáticamente en cada una de las siguientes peticiones. Esto significa que,
una vez que formen parte de la sesión, estos objetos se podrán utilizar en
cualquier página de la aplicación. Sin embargo, la función
<function>session_register</function>: ha sido borrada a partir de PHP 5.4.0
</para>
<para>
Si una aplicación serializa objetos para su uso posterior, se recomienda
encarecidamente que se incluya la definición de la clase en toda la aplicación.
Si no se hiciera, se deserializaría el objeto sin una definición de clase, lo
cual daría como resultado que PHP definiera al objeto con la clase
<classname>__PHP_Incomplete_Class_Name</classname>,
que no tiene métodos, haciendo que el objeto no fuera útil.
</para>
<para>
Por tanto, si en el ejemplo anterior <varname>$a</varname> se guardara en una sesión
mediante <literal>session_register("a")</literal>, sería necesario incluir el fichero
<literal>classa.inc</literal> en todas las páginas, no sólo en <filename>page1.php</filename>
y <filename>page2.php</filename>.
</para>
<para>
Más allá del consejo de arriba, observe que también se puede conectar con eventos de
serialización y deserialización sobre un objeto usando los métodos
<link linkend="object.sleep">__sleep()</link> y
<link linkend="object.wakeup">__wakeup()</link>. El uso de
<link linkend="object.sleep">__sleep()</link> también permite serializar
únicamente un subconjunto de propiedades de objetos.
</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
-->