-
Notifications
You must be signed in to change notification settings - Fork 112
Expand file tree
/
Copy pathserialize.xml
More file actions
156 lines (147 loc) · 5.47 KB
/
Copy pathserialize.xml
File metadata and controls
156 lines (147 loc) · 5.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: d816a0fad6c458d9515f697cc89e26ca9d8069f5 Maintainer: mowangjuanzi Status: ready -->
<!-- CREDITS: Luffy -->
<refentry xml:id="function.serialize" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>serialize</refname>
<refpurpose>生成值的可存储表示</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>serialize</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
生成值的可存储表示。
</para>
<para>
这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。
</para>
<para>
想要将已序列化的字符串变回 PHP 的值,可使用
<function>unserialize</function>。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
要序列化的值。<function>serialize</function> 处理所有的类型,除了 <type>resource</type> 类型和一些
<type>object</type>(见下面的注释)。<function>serialize</function>
甚至可以序列化包含对自身引用的数组。数组/对象内的循环引用也会被存储。其它任何引用都会丢失。
</para>
<para>
序列化对象时,PHP 将尝试在序列化之前调用成员函数 <link linkend="object.serialize">__serialize()</link> 或
<link linkend="object.sleep">__sleep()</link>。这是为了允许对象在序列化之前进行最后一分钟的清理等等。同样,当使用
<function>unserialize</function> 恢复对象时,会调用 <link linkend="object.unserialize">__unserialize()</link>
或 <link linkend="object.wakeup">__wakeup()</link> 成员函数。
</para>
<note>
<para>
对象的 private 成员会在名前添加类名;protected 成员会在名前添加“*”;这些前置值在两边都有 null 字节。
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
返回字符串,包含 <parameter>value</parameter> 的字节流表示,可以存储在任何地方。
</para>
<para>
注意这可能是包含 null 字节的二进制字符串,需要按原样存储和处理。例如,<function>serialize</function>
的输出通常应该存储在数据库中 的 BLOB 字段,而不是 CHAR 或 TEXT 字段。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>serialize</function> 示例</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
// $sssion_data 是多维数组,包含当前用户的
// 会话信息。可以在请求结束时使用 serialize()
// 将其存储在数据库中。
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* Something went wrong.. */
}
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
注意许多内置 PHP 对象不能序列化。然而,要么实现 <interfacename>Serializable</interfacename> 接口,要么实现 <link
linkend="object.serialize">__serialize()</link>/<link linkend="object.unserialize">__unserialize()</link>
或 <link linkend="object.sleep">__sleep()</link>/<link linkend="object.wakeup">__wakeup()</link>
魔术方法的则是可以的。如果内部类不满足这些其中任意一个,则就不能可靠的进行序列化。
</para>
<para>
上述规则有一些历史例外,一些内部对象可以在不实现接口或公开方法的情况下,使其序列化。
</para>
</note>
<warning>
<para>
当 <function>serialize</function> 序列化对象时,命名空间中的类名不要以反斜线开头,以便实现最大兼容性。
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>unserialize</function></member>
<member><function>var_export</function></member>
<member><function>json_encode</function></member>
<member><link linkend="language.oop5.serialization">序列化对象</link></member>
<member><link linkend="object.sleep">__sleep()</link></member>
<member><link linkend="object.wakeup">__wakeup()</link></member>
<member><link linkend="object.serialize">__serialize()</link></member>
<member><link linkend="object.unserialize">__unserialize()</link></member>
</simplelist>
</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:"~/.phpdoc/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
-->