-
Notifications
You must be signed in to change notification settings - Fork 58
/
serialize.xml
172 lines (163 loc) · 6.63 KB
/
serialize.xml
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8cdc6621f9826d04abc3e50438c010804d7e8683 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi,mumumu -->
<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 バイトを含む可能性もあることに注意しましょう。
保存したり利用したりするときも、null バイトが含まれることを想定しておかないといけません。
たとえば、<function>serialize</function> の出力をデータベースに格納するときには、
通常は CHAR 型や TEXT 型ではなく BLOB 型を使わないといけません。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>serialize</function> の例</title>
<programlisting role="php">
<![CDATA[
<?php
// $session_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))) {
/* 何か問題があったようです.. */
}
}
?>
]]>
</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
-->