mirror of
https://github.com/php/doc-es.git
synced 2026-03-25 16:02:13 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@330694 c90b9560-bf6c-de11-be94-00142212c4b1
123 lines
4.2 KiB
XML
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
|
|
-->
|