<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.12 $ -->
<!-- splitted from ./en/functions/var.xml, last change in rev 1.2 -->
  <refentry id="function.unserialize">
   <refnamediv>
    <refname>unserialize</refname>
    <refpurpose>
     Creates a PHP value from a stored representation
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>mixed</type><methodname>unserialize</methodname>
      <methodparam><type>string</type><parameter>str</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter>callback</parameter></methodparam>
     </methodsynopsis>
    <simpara>
     <function>unserialize</function> takes a single serialized
     variable (see <function>serialize</function>) and converts it
     back into a PHP value.  The converted value is returned, and can
     be an <type>integer</type>, <type>float</type>,
     <type>string</type>, <type>array</type> or <type>object</type>.
     In case the passed string is not unserializeable, &false; is returned.
    </simpara>
    <note>
     <title>unserialize_callback_func directive</title>
     <para>
      It's possible to set a callback-function which will be called,
      if an undefined class should be instantiated during unserializing.
      (to prevent getting an incomplete <type>object</type> "__PHP_Incomplete_Class".)
      Use your &php.ini;, <function>ini_set</function> or &htaccess; 
      to define 'unserialize_callback_func'.  Everytime an undefined class
      should be instantiated, it'll be called.  To disable this feature just
      empty this setting.  Also note that the directive
      unserialize_callback_func directive became 
      available in PHP 4.2.0. 
     </para>
    </note>
    <note>
     <para>
     The <parameter>callback</parameter> parameter was added in PHP 4.2.0
     </para>
    </note>
    <para>
     If the variable being unserialized is an object, after successfully 
     reconstructing the object PHP will automatically attempt to call the
     <function>__wakeup</function> member function (if it exists). 
     <example>
      <title>unserialize_callback_func example</title>
      <programlisting role="php">
<![CDATA[
<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';

// unserialize_callback_func directive available as of PHP 4.2.0
ini_set('unserialize_callback_func','mycallback'); // set your callback_function

function mycallback($classname) {
    // just include a file containing your classdefinition
    // you get $classname to figure out which classdefinition is required
}
?>
]]>
      </programlisting>
     </example>
    </para>
    <note>
     <para>
      In PHP 3, methods are not preserved when unserializing a
      serialized object. PHP 4 removes that limitation and restores
      both properties and methods.  Please see the <link
      linkend="language.oop.serialization">Serializing Objects</link>
      section of <link linkend="language.oop">Classes and
      Objects</link> or more information.
     </para>
    </note>
    <para>
     <example>
      <title><function>unserialize</function> example</title>
      <programlisting role="php">
<![CDATA[
<?php
// Here, we use unserialize() to load session data to the
// $session_data array from the string selected from a database.
// This example complements the one described with serialize().

$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array ($PHP_AUTH_USER);
if (!odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) {
    // if the execute or fetch fails, initialize to empty array
    $session_data = array();
} else {
    // we should now have the serialized data in $tmp[0].
    $session_data = unserialize ($tmp[0]);
    if (!is_array ($session_data)) {
        // something went wrong, initialize to empty array
        $session_data = array();
    }
}
?>
]]>
      </programlisting>
     </example>
    </para>
   <para>
    See also <function>serialize</function>.
   </para>
   </refsect1>
  </refentry>

<!-- 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:"../../../../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
-->