mirror of
https://github.com/php/doc-es.git
synced 2026-03-24 07:22:16 +01:00
114 lines
3.9 KiB
XML
114 lines
3.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 70f392045a26b176f206013f00fa14b86440efd1 Maintainer: PhilDaiguille Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<!-- TODO Rewrite to remove usage of "you" and talk about __serialize/_unserialize -->
|
|
<sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
|
|
<title>Serializar objetos - objetos en sesión</title>
|
|
<titleabbrev>Serialización de objetos</titleabbrev>
|
|
|
|
<para>
|
|
<function>serialize</function> devuelve un string que contiene
|
|
una representación lineal de cualquier valor que
|
|
puede ser almacenado en PHP. <function>unserialize</function> puede utilizar este
|
|
string para recrear el valor original de la variable a partir de su representación lineal. Utilizar <function>serialize</function>
|
|
para guardar un objeto conservará todas sus variables. Sus métodos no serán conservados, solo el nombre de la clase lo será.
|
|
</para>
|
|
|
|
<para>
|
|
Para poder deserializar (<function>unserialize</function>) un objeto,
|
|
la clase del objeto debe estar definida, para permitir su reconstrucción.
|
|
En otras palabras, si se tiene un objeto de la clase A y se serializa,
|
|
la representación lineal obtenida hará referencia a la clase A y contendrá todas
|
|
sus variables. Si se desea poder deserializar esta representación lineal en un
|
|
lugar donde la clase A no esté definida (en otro fichero, por ejemplo),
|
|
entonces se deberá redclarar la clase A antes de proceder a la deserialización
|
|
de su representación lineal. Esto puede hacerse, por ejemplo, incluyendo el
|
|
fichero de definición de la clase, o utilizando la función
|
|
<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);
|
|
// guarda $s en algún lugar donde page2.php pueda encontrarlo
|
|
file_put_contents('store', $s);
|
|
|
|
// page2.php :
|
|
|
|
// se necesita la definición de la clase
|
|
// para que unserialize() funcione
|
|
include "A.php";
|
|
|
|
$s = file_get_contents('store');
|
|
$a = unserialize($s);
|
|
|
|
// llamada a show_one() en el objeto $a, muestra 1
|
|
$a->show_one();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>
|
|
Si una aplicación serializa objetos, se recomienda encarecidamente, para su uso
|
|
futuro, que la aplicación incluya las definiciones de las clases de los objetos serializados
|
|
en cada página. No hacerlo podría resultar en un objeto deserializado sin su definición
|
|
de clase. PHP asignaría entonces a este objeto una clase de tipo
|
|
<classname>__PHP_Incomplete_Class_Name</classname>, que no tiene métodos, y
|
|
produciría un objeto inútil.
|
|
</para>
|
|
|
|
<para>
|
|
Así, en el ejemplo anterior, si <varname>$a</varname> se registra en la sesión
|
|
añadiendo una clave a la variable superglobal <varname>$_SESSION</varname>, se debería incluir el fichero
|
|
<literal>A.php</literal> en todas las páginas, y no solo en
|
|
<filename>page1.php</filename> y <filename>page2.php</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
Tenga en cuenta que también se pueden utilizar los eventos de serialización y deserialización
|
|
en un objeto utilizando 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> permite también serializar solo una parte de las propiedades del 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
|
|
-->
|