-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathserialize.xml
176 lines (168 loc) · 7.96 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
173
174
175
176
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 8cdc6621f9826d04abc3e50438c010804d7e8683 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<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> (смотрите примечание ниже).
Возможно также сериализовать массивы, которые содержат
ссылки на себя. Циклические ссылки внутри сериализуемого
массива/объекта также сохраняются. Любые другие
ссылки будут потеряны.
</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>
Начало имён закрытых членов объекта дополняются именем класса,
а начало имён защищённых членов символом '*'. Эти дополненные
значения окружаются нулевым байтом (0x00) с обеих сторон.
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает строку, содержащую потоковое представление переменной
<parameter>value</parameter>, которая может быть сохранена где угодно.
</para>
<para>
Обратите внимание, что это бинарная строка, которая может включать нулевые байты,
и её нужно хранить и обрабатывать соответствующим образом. Например,
вывод функции <function>serialize</function> лучше хранить в BLOB-поле
базы данных, а не в полях типа CHAR или TEXT.
</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
-->