2010-03-28 22:10:10 +00:00
<?xml version="1.0" encoding="utf-8"?>
2009-07-11 09:15:58 +00:00
<!-- $Revision$ -->
2007-06-20 22:25:43 +00:00
<refentry xml:id= "function.serialize" xmlns= "http://docbook.org/ns/docbook" >
2007-06-10 22:32:35 +00:00
<refnamediv >
<refname > serialize</refname>
2007-06-10 23:13:23 +00:00
<refpurpose > Generates a storable representation of a value</refpurpose>
2007-06-10 22:32:35 +00:00
</refnamediv>
2007-06-10 23:13:23 +00:00
<refsect1 role= "description" >
&reftitle.description;
2007-06-10 22:32:35 +00:00
<methodsynopsis >
<type > string</type> <methodname > serialize</methodname>
<methodparam > <type > mixed</type> <parameter > value</parameter> </methodparam>
</methodsynopsis>
2007-06-10 23:13:23 +00:00
<para >
2012-11-06 01:57:21 +00:00
Generates a storable representation of a value.
2007-06-10 23:13:23 +00:00
</para>
<para >
2007-06-10 22:32:35 +00:00
This is useful for storing or passing PHP values around without
losing their type and structure.
2007-06-10 23:13:23 +00:00
</para>
<para >
2007-06-10 22:32:35 +00:00
To make the serialized string into a PHP value again, use
2007-06-10 23:13:23 +00:00
<function > unserialize</function> .
</para>
</refsect1>
<refsect1 role= "parameters" >
&reftitle.parameters;
<para >
<variablelist >
<varlistentry >
<term > <parameter > value</parameter> </term>
<listitem >
<para >
The value to be serialized. <function > serialize</function>
handles all types, except the <type > resource</type> -type.
You can even <function > serialize</function> arrays that contain
references to itself. Circular references inside the array/object you
2008-11-07 13:18:31 +00:00
are serializing will also be stored. Any other
2007-06-10 23:13:23 +00:00
reference will be lost.
</para>
<para >
When serializing objects, PHP will attempt to call the member function
2012-01-12 15:01:15 +00:00
<link linkend= "object.sleep" > __sleep()</link> prior to serialization.
2007-11-30 11:52:11 +00:00
This is to allow the object to do any last minute clean-up, etc. prior
to being serialized. Likewise, when the object is restored using
2012-01-12 15:01:15 +00:00
<function > unserialize</function> the <link linkend= "object.wakeup" > __wakeup()</link> member function is called.
2007-06-10 23:13:23 +00:00
</para>
2008-11-07 13:21:22 +00:00
<note >
<para >
Object's private members have the class name prepended to the member
name; protected members have a '*' prepended to the member name.
These prepended values have null bytes on either side.
</para>
</note>
2007-06-10 23:13:23 +00:00
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role= "returnvalues" >
&reftitle.returnvalues;
<para >
Returns a string containing a byte-stream representation of
<parameter > value</parameter> that can be stored anywhere.
</para>
2012-11-06 01:57:21 +00:00
<para >
Note that this is a binary string which may include null bytes, and needs
to be stored and handled as such. For example,
<function > serialize</function> output should generally be stored in a BLOB
field in a database, rather than a CHAR or TEXT field.
</para>
2007-06-10 23:13:23 +00:00
</refsect1>
<refsect1 role= "examples" >
&reftitle.examples;
2007-06-10 22:32:35 +00:00
<para >
<example >
<title > <function > serialize</function> example</title>
<programlisting role= "php" >
2002-04-15 00:12:54 +00:00
< ![CDATA[
2003-05-30 16:58:05 +00:00
< ?php
2002-04-15 00:12:54 +00:00
// $session_data contains a multi-dimensional array with session
// information for the current user. We use serialize() to store
// it in a database at the end of the request.
2003-12-15 16:55:22 +00:00
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
2002-04-15 00:12:54 +00:00
"UPDATE sessions SET data = ? WHERE id = ?");
2007-06-10 23:13:23 +00:00
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
2009-03-18 21:30:26 +00:00
if (!odbc_execute($stmt, $sqldata)) {
2002-04-15 00:12:54 +00:00
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
2009-03-18 21:30:26 +00:00
if (!odbc_execute($stmt, $sqldata)) {
2003-10-26 16:32:28 +00:00
/* Something went wrong.. */
2002-04-15 00:12:54 +00:00
}
}
2003-05-30 16:58:05 +00:00
?>
2002-04-15 00:12:54 +00:00
]]>
2007-06-10 22:32:35 +00:00
</programlisting>
</example>
</para>
2007-06-10 23:13:23 +00:00
</refsect1>
<refsect1 role= "notes" >
&reftitle.notes;
<note >
<para >
2010-10-25 19:38:17 +00:00
Note that many built-in PHP objects cannot be serialized. However, those with
this ability either implement the <interfacename > Serializable</interfacename> interface or the
2012-01-12 15:01:15 +00:00
magic <link linkend= "object.sleep" > __sleep()</link> and
<link linkend= "object.wakeup" > __wakeup()</link> methods. If an
2010-10-25 19:38:17 +00:00
internal class does not fulfill any of those requirements, it cannot reliably be
2010-10-20 06:52:32 +00:00
serialized.
</para>
<para >
There are some historical exceptions to the above rule, where some internal objects
2010-10-25 19:38:17 +00:00
could be serialized without implementing the interface or exposing the methods. Notably,
the <classname > ArrayObject</classname> prior to PHP 5.2.0.
2007-06-10 23:13:23 +00:00
</para>
</note>
2013-10-25 15:22:05 +00:00
<warning >
<para >
2015-04-20 10:48:37 +00:00
When <function > serialize</function> serializes objects, the leading backslash is not included in the class name of namespaced classes for maximum compatibility.
2013-10-25 15:22:05 +00:00
</para>
</warning>
2007-06-10 23:13:23 +00:00
</refsect1>
<refsect1 role= "seealso" >
&reftitle.seealso;
2007-06-10 22:32:35 +00:00
<para >
2007-06-10 23:13:23 +00:00
<simplelist >
<member > <function > unserialize</function> </member>
2012-09-02 13:15:00 +00:00
<member > <function > var_export</function> </member>
<member > <function > json_encode</function> </member>
2009-09-23 20:09:24 +00:00
<member > <link linkend= "language.oop5.serialization" > Serializing Objects</link> </member>
2012-01-12 15:01:15 +00:00
<member > <link linkend= "object.sleep" > __sleep()</link> </member>
<member > <link linkend= "object.wakeup" > __wakeup()</link> </member>
2007-06-10 23:13:23 +00:00
</simplelist>
2007-06-10 22:32:35 +00:00
</para>
</refsect1>
2007-06-10 23:13:23 +00:00
2007-06-10 22:32:35 +00:00
</refentry>
2002-04-15 00:12:54 +00:00
<!-- 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
2009-09-25 07:04:39 +00:00
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
2002-04-15 00:12:54 +00:00
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
-->