<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.oop5.serialization.php',
    1 => 'Serializaci&oacute;n de objetos',
    2 => 'Serializar objetos - objetos en sesi&oacute;n',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Clases y objetos',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.references.php',
    1 => 'Objetos y referencias',
  ),
  'next' => 
  array (
    0 => 'language.oop5.variance.php',
    1 => 'Covarianza y Contravarianza',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/oop5/serialization.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.serialization" class="sect1">
 <h2 class="title">Serializar objetos - objetos en sesión</h2>
 

 <p class="para">
  <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> devuelve un string que contiene
  una representación lineal de cualquier valor que
  puede ser almacenado en PHP. <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> puede utilizar este
  string para recrear el valor original de la variable a partir de su representación lineal. Utilizar serialize
  para guardar un objeto conservará todas sus variables. Sus métodos no serán conservados, solo el nombre de la clase lo será.
 </p>

 <p class="para">
  Para poder deserializar (<span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span>) 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
  <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span>.
 </p>

 <div class="informalexample">
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// A.php :<br /><br />  </span><span style="color: #007700">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{<br />      public </span><span style="color: #0000BB">$one </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />      public function </span><span style="color: #0000BB">show_one</span><span style="color: #007700">() {<br />          echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">one</span><span style="color: #007700">;<br />      }<br />  }<br /><br /></span><span style="color: #FF8000">// page1.php :<br /><br />  </span><span style="color: #007700">include </span><span style="color: #DD0000">"A.php"</span><span style="color: #007700">;<br /><br />  </span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br />  </span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br />  </span><span style="color: #FF8000">// guarda $s en algún lugar donde page2.php pueda encontrarlo<br />  </span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'store'</span><span style="color: #007700">, </span><span style="color: #0000BB">$s</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// page2.php :<br /><br />  // se necesita la definición de la clase<br />  // para que unserialize() funcione<br />  </span><span style="color: #007700">include </span><span style="color: #DD0000">"A.php"</span><span style="color: #007700">;<br /><br />  </span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'store'</span><span style="color: #007700">);<br />  </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$s</span><span style="color: #007700">);<br /><br />  </span><span style="color: #FF8000">// llamada a show_one() en el objeto $a, muestra 1<br />  </span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">show_one</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

 </div>

 <p class="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
  <span class="classname"><strong class="classname">__PHP_Incomplete_Class_Name</strong></span>, que no tiene métodos, y
  produciría un objeto inútil.
 </p>

 <p class="para">
  Así, en el ejemplo anterior, si <var class="varname">$a</var> se registra en la sesión
  añadiendo una clave a la variable superglobal <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>, se debería incluir el fichero
  <code class="literal">A.php</code> en todas las páginas, y no solo en
  <var class="filename">page1.php</var> y <var class="filename">page2.php</var>.
 </p>

 <p class="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 <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> y
  <a href="language.oop5.magic.php#object.wakeup" class="link">__wakeup()</a>. El uso de
  <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> permite también serializar solo una parte de las propiedades del objeto.
 </p>

</div><?php manual_footer($setup); ?>