<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >serialize</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="Variable 变量函数" HREF="ref.var.html"><LINK REL="PREVIOUS" TITLE="print_r" HREF="function.print-r.html"><LINK REL="NEXT" TITLE="settype" HREF="function.settype.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="refentry" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="function.print-r.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="function.settype.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="function.serialize" ></A >serialize</H1 ><DIV CLASS="refnamediv" ><A NAME="AEN236977" ></A ><P > (PHP 3 >= 3.0.5, PHP 4, PHP 5)</P >serialize -- 产生一个可存储的值的表示 </DIV ><DIV CLASS="refsect1" ><A NAME="AEN236980" ></A ><H2 >描述</H2 >string <B CLASS="methodname" >serialize</B > ( mixed value )<BR ></BR ><P > <B CLASS="function" >serialize()</B > 返回字符串,此字符串包含了表示 <CODE CLASS="parameter" >value</CODE > 的字节流,可以存储于任何地方。 </P ><P > 这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。 </P ><P > 想要将已序列化的字符串变回 PHP 的值,可使用 <A HREF="function.unserialize.html" ><B CLASS="function" >unserialize()</B ></A >。<B CLASS="function" >serialize()</B > 可处理除了 <A HREF="language.types.resource.html" ><B CLASS="type" >resource</B ></A > 之外的任何类型。甚至可以 <B CLASS="function" >serialize()</B > 那些包含了指向其自身引用的数组。你正 <B CLASS="function" >serialize()</B > 的数组/对象中的引用也将被存储。 </P ><P > 当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 <B CLASS="function" >__sleep()</B >。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 <A HREF="function.unserialize.html" ><B CLASS="function" >unserialize()</B ></A > 恢复对象时, 将调用 <B CLASS="function" >__wakeup()</B > 成员函数。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制,可以同时存储属性和方法。请参见<A HREF="language.oop.html" >类与对象</A >中的<A HREF="language.oop.serialization.html" >序列化对象</A >部分获取更多信息。 </P ></BLOCKQUOTE ></DIV ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN237007" ></A ><P ><B >例 1. <B CLASS="function" >serialize()</B > 示例</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// $session_data 是包含了当前用户 session 信息的多维数组。<br />// 我们使用 serialize() 在请求结束之前将其存储到数据库中。<br /><br /></font><font color="#0000BB">$conn </font><font color="#007700">= </font><font color="#0000BB">odbc_connect </font><font color="#007700">(</font><font color="#DD0000">"webdb"</font><font color="#007700">, </font><font color="#DD0000">"php"</font><font color="#007700">, </font><font color="#DD0000">"chicken"</font><font color="#007700">);<br /></font><font color="#0000BB">$stmt </font><font color="#007700">= </font><font color="#0000BB">odbc_prepare </font><font color="#007700">(</font><font color="#0000BB">$conn</font><font color="#007700">,<br /> </font><font color="#DD0000">"UPDATE sessions SET data = ? WHERE id = ?"</font><font color="#007700">);<br /></font><font color="#0000BB">$sqldata </font><font color="#007700">= array (</font><font color="#0000BB">serialize</font><font color="#007700">(</font><font color="#0000BB">$session_data</font><font color="#007700">), </font><font color="#0000BB">$PHP_AUTH_USER</font><font color="#007700">);<br />if (!</font><font color="#0000BB">odbc_execute </font><font color="#007700">(</font><font color="#0000BB">$stmt</font><font color="#007700">, &</font><font color="#0000BB">$sqldata</font><font color="#007700">)) {<br /> </font><font color="#0000BB">$stmt </font><font color="#007700">= </font><font color="#0000BB">odbc_prepare</font><font color="#007700">(</font><font color="#0000BB">$conn</font><font color="#007700">,<br /> </font><font color="#DD0000">"INSERT INTO sessions (id, data) VALUES(?, ?)"</font><font color="#007700">);<br /> if (!</font><font color="#0000BB">odbc_execute</font><font color="#007700">(</font><font color="#0000BB">$stmt</font><font color="#007700">, &</font><font color="#0000BB">$sqldata</font><font color="#007700">)) {<br /> </font><font color="#FF8000">/* 出错 */<br /> </font><font color="#007700">}<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > 参见:<A HREF="function.unserialize.html" ><B CLASS="function" >unserialize()</B ></A >。 </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="function.print-r.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="function.settype.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >print_r</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="ref.var.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >settype</TD ></TR ></TABLE ></DIV ></BODY ></HTML >