<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >unserialize</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="strval" HREF="function.strval.html"><LINK REL="NEXT" TITLE="unset" HREF="function.unset.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.strval.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="function.unset.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="function.unserialize" ></A >unserialize</H1 ><DIV CLASS="refnamediv" ><A NAME="AEN237085" ></A ><P > (PHP 3 >= 3.0.5, PHP 4, PHP 5)</P >unserialize -- 从已存储的表示中创建 PHP 的值 </DIV ><DIV CLASS="refsect1" ><A NAME="AEN237088" ></A ><H2 >描述</H2 >mixed <B CLASS="methodname" >unserialize</B > ( string str [, string callback] )<BR ></BR ><P > <B CLASS="function" >unserialize()</B > 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 <A HREF="language.types.integer.html" ><B CLASS="type" >integer</B ></A >、<A HREF="language.types.float.html" ><B CLASS="type" >float</B ></A >、<A HREF="language.types.string.html" ><B CLASS="type" >string</B ></A >、<A HREF="language.types.array.html" ><B CLASS="type" >array</B ></A > 或 <A HREF="language.types.object.html" ><B CLASS="type" >object</B ></A >。如果传递的字符串不可解序列化,则返回 <TT CLASS="constant" ><B >FALSE</B ></TT >。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >unserialize_callback_func 指令: </B > 如果在解序列化的时候需要实例化一个未定义类,则可以设置回调函数以供调用(以免得到的是不完整的 <A HREF="language.types.object.html" ><B CLASS="type" >object</B ></A > “__PHP_Incomplete_Class”)。可通过 <TT CLASS="filename" >php.ini</TT >、<A HREF="function.ini-set.html" ><B CLASS="function" >ini_set()</B ></A > 或 <TT CLASS="filename" >.htaccess</TT > 定义‘unserialize_callback_func’。每次实例化一个未定义类时它都会被调用。若要禁止这个特性,只需置空此设定。还需要注意的是 unserialize_callback_func 指令是从 PHP 4.2.0 开始提供使用的。 </P ></BLOCKQUOTE ></DIV ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > <CODE CLASS="parameter" >callback</CODE > 参数是在 PHP 4.2.0 中添加的 </P ></BLOCKQUOTE ></DIV ><P > 若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 <B CLASS="function" >__wakeup()</B > 成员函数(如果存在的话)。 <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN237119" ></A ><P ><B >例 1. unserialize_callback_func 示例</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$serialized_object</font><font color="#007700">=</font><font color="#DD0000">'O:1:"a":1:{s:5:"value";s:3:"100";}'</font><font color="#007700">;<br /><br /></font><font color="#FF8000">// unserialize_callback_func 从 PHP 4.2.0 起可用<br /></font><font color="#0000BB">ini_set</font><font color="#007700">(</font><font color="#DD0000">'unserialize_callback_func'</font><font color="#007700">,</font><font color="#DD0000">'mycallback'</font><font color="#007700">); </font><font color="#FF8000">// 设置您的回调函数<br /><br /></font><font color="#007700">function </font><font color="#0000BB">mycallback</font><font color="#007700">(</font><font color="#0000BB">$classname</font><font color="#007700">) {<br /> </font><font color="#FF8000">// 只需包含含有类定义的文件<br /> // $classname 指出需要的是哪一个类<br /></font><font color="#007700">}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </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="AEN237127" ></A ><P ><B >例 2. <B CLASS="function" >unserialize()</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">// 这里,我们使用 unserialize() 装载来自数据库的 $session_data 数组中的会话数据。<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">, </font><font color="#DD0000">"SELECT data FROM sessions WHERE id = ?"</font><font color="#007700">);<br /></font><font color="#0000BB">$sqldata </font><font color="#007700">= array (</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">) || !</font><font color="#0000BB">odbc_fetch_into </font><font color="#007700">(</font><font color="#0000BB">$stmt</font><font color="#007700">, &</font><font color="#0000BB">$tmp</font><font color="#007700">)) {<br /> </font><font color="#FF8000">// 如果执行出错或返回错误,则初始化为空数组<br /> </font><font color="#0000BB">$session_data </font><font color="#007700">= array();<br />} else {<br /> </font><font color="#FF8000">// 现在我们需要的是 $tmp[0] 中已序列化的数据。<br /> </font><font color="#0000BB">$session_data </font><font color="#007700">= </font><font color="#0000BB">unserialize </font><font color="#007700">(</font><font color="#0000BB">$tmp</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">]);<br /> if (!</font><font color="#0000BB">is_array </font><font color="#007700">(</font><font color="#0000BB">$session_data</font><font color="#007700">)) {<br /> </font><font color="#FF8000">// 出错,初始化为空数组<br /> </font><font color="#0000BB">$session_data </font><font color="#007700">= array();<br /> }<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > 参见 <A HREF="function.serialize.html" ><B CLASS="function" >serialize()</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.strval.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.unset.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >strval</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="ref.var.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >unset</TD ></TR ></TABLE ></DIV ></BODY ></HTML >