You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<function>serialize</function> checa se sua classe tem uma função com
84
-
o nome mágico <linklinkend="object.sleep">__sleep()</link>. Se houver, a função é
85
-
executada antes de qualquer serialização. Ela pode limpar o objeto
86
-
e deve retornar um array com os nomes de todas as variáveis
87
-
do objeto que devem ser serializadas. Se o método não retornar nada,
88
-
então &null; é serializado e um
89
-
<constant>E_NOTICE</constant> disparado.
83
+
<function>serialize</function> verifica se a classe contém uma função
84
+
com o nome mágico <linklinkend="object.serialize">__serialize()</link>. Se sim, essa função é
85
+
executada antes de qualquer serialização. Ela precisa construir e retornar um array associativo de chaves-valores
86
+
que representam a forma serializada do objeto. Se o array não for retornado então um erro <classname>TypeError</classname>
87
+
será lançado.
90
88
</para>
91
89
<note>
92
90
<para>
93
-
Não é possível que <linklinkend="object.sleep">__sleep()</link> retorne nomes de
94
-
propriedades privadas da classe pai. Fazer isso causará um erro de nível
95
-
<constant>E_NOTICE</constant>.
96
-
Como alternativa, utilize <linklinkend="object.serialize">__serialize()</link>.
97
-
</para>
98
-
</note>
99
-
<note>
100
-
<para>
101
-
Desde o PHP 8.0.0, retornar um valor que não seja um array de <linklinkend="object.sleep">__sleep()</link> gera um warning. Anteriormente gerava um aviso.
91
+
Se ambos <linklinkend="object.serialize">__serialize()</link> e <linklinkend="object.sleep">__sleep()</link>
92
+
estiverem definidos no mesmo objeto, somente <linklinkend="object.serialize">__serialize()</link> será chamado.
93
+
<linklinkend="object.sleep">__sleep()</link> será ignorado. Se o objeto implementa a interface <linklinkend="class.serializable">Serializable</link>,
94
+
o método <literal>serialize()</literal> da interface será ignorado e o método mágico <linklinkend="object.serialize">__serialize()</link>
95
+
será utilizado.
102
96
</para>
103
97
</note>
104
98
<para>
105
-
O intuito do método <linklinkend="object.sleep">__sleep()</link> é enviar dados
106
-
pendentes ou realizar tarefas de limpeza. Além disso, a função é
107
-
útil se tiver objetos muito grandes que não precisem ser completamente salvos.
108
-
</para>
109
-
<para>
110
-
Ao mesmo tempo, <function>unserialize</function> checa pela
111
-
presença da função com o nome mágico
112
-
<linklinkend="object.wakeup">__wakeup()</link>. Se presente, essa função pode
113
-
reconstruir qualquer recurso que o objeto possa ter.
99
+
O uso pretendido de <linklinkend="object.serialize">__serialize()</link> é definir uma representação arbitrária,
100
+
amigável, da representação do objeto. Elementos do array podem corresponder a propriedades do objeto diretamente, mas
101
+
isso não é obrigatório.
114
102
</para>
115
103
<para>
116
-
O intuito do método <linklinkend="object.wakeup">__wakeup()</link> é
117
-
restabelecer qualquer conexão com banco de dados que podem ter sido perdidas
118
-
durante a serialização, e realizar outras tarefas de
119
-
reinicialização.
104
+
Inversamente, <function>unserialize</function> verifica a
105
+
presença da função mágica
106
+
<linklinkend="object.unserialize">__unserialize()</link>. Se presente, essa função será chamada
107
+
com o array retornado de <linklinkend="object.serialize">__serialize()</link>. Ela poderá,
108
+
então, restaurar as propriedades do objeto a partir do array.
120
109
</para>
110
+
<note>
111
+
<para>
112
+
Se ambos <linklinkend="object.unserialize">__unserialize()</link> e <linklinkend="object.wakeup">__wakeup()</link>
113
+
estiverem definidos, somente <linklinkend="object.unserialize">__unserialize()</link> será chamado, e
Não é possível que <linklinkend="object.sleep">__sleep()</link> retorne nomes de
206
+
propriedades privadas da classe superior. Fazer isso causará um erro de nível
207
+
<constant>E_NOTICE</constant>.
208
+
Como alternativa, utilize <linklinkend="object.serialize">__serialize()</link>.
207
209
</para>
208
210
</note>
209
211
<note>
210
212
<para>
211
-
Esse recurso está disponível desde o PHP 7.4.0.
213
+
A partir do PHP 8.0.0, retornar um valor que não seja um array originado de <linklinkend="object.sleep">__sleep()</link> gera um alerta. Anteriormente gerava um aviso.
212
214
</para>
213
215
</note>
216
+
<para>
217
+
O intuito do método <linklinkend="object.sleep">__sleep()</link> é enviar dados
218
+
pendentes ou realizar tarefas de limpeza similares. Além disso, a função é
219
+
útil se um objeto muito grande não precisar ser completamente salvo.
220
+
</para>
221
+
<para>
222
+
Ao mesmo tempo, <function>unserialize</function> verifica a
223
+
presença da função com o nome mágico
224
+
<linklinkend="object.wakeup">__wakeup()</link>. Se presente, essa função pode
225
+
reconstruir quaisquer recursos que o objeto possa ter.
226
+
</para>
227
+
<para>
228
+
O intuito do método <linklinkend="object.wakeup">__wakeup()</link> é
229
+
restabelecer quaisquer conexões com bancos de dados que possam ter sido perdidas
230
+
durante a serialização e realizar outras tarefas de
231
+
reinicialização.
232
+
</para>
214
233
<example>
215
-
<title>Serialize e unserialize</title>
234
+
<title>Sleep e wakeup</title>
216
235
<programlistingrole="php">
217
236
<![CDATA[
218
237
<?php
@@ -234,21 +253,13 @@ class Connection
234
253
$this->link = new PDO($this->dsn, $this->username, $this->password);
0 commit comments