1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-23 22:52:18 +01:00

[Sync EN] Move __sleep()/__wakeup() after __serialize()/__unserialize() (#2669)

This commit is contained in:
Louis-Arnaud
2026-03-17 09:00:06 +01:00
committed by GitHub
parent 711504adea
commit a53b22d4ba

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5e15a6c3e4d5819102361ae78e73c90a06238c8a Maintainer: yannick Status: ready -->
<!-- EN-Revision: 8f51247cb4631b29686f867bd904dfe5b2678074 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
<title>Méthodes magiques</title>
@@ -25,10 +25,10 @@
<link linkend="object.set">__set()</link>,
<link linkend="object.isset">__isset()</link>,
<link linkend="object.unset">__unset()</link>,
<link linkend="object.sleep">__sleep()</link>,
<link linkend="object.wakeup">__wakeup()</link>,
<link linkend="object.serialize">__serialize()</link>,
<link linkend="object.unserialize">__unserialize()</link>,
<link linkend="object.sleep">__sleep()</link>,
<link linkend="object.wakeup">__wakeup()</link>,
<link linkend="object.tostring">__toString()</link>,
<link linkend="object.invoke">__invoke()</link>,
<link linkend="object.set-state">__set_state()</link>,
@@ -64,101 +64,6 @@
</para>
</warning>
<sect2 xml:id="language.oop5.magic.sleep">
<title>
<link linkend="object.sleep">__sleep()</link> et
<link linkend="object.wakeup">__wakeup()</link>
</title>
<methodsynopsis xml:id="object.sleep">
<modifier>public</modifier> <type>array</type><methodname>__sleep</methodname>
<void/>
</methodsynopsis>
<methodsynopsis xml:id="object.wakeup">
<modifier>public</modifier> <type>void</type><methodname>__wakeup</methodname>
<void/>
</methodsynopsis>
<para>
<function>serialize</function> vérifie si la classe a une méthode avec le
nom magique <link linkend="object.sleep">__sleep()</link>.
Si c'est le cas, cette méthode sera exécutée avant toute sérialisation. Elle peut
nettoyer l'objet, et elle est supposée retourner un tableau avec les noms de toutes
les variables de l'objet qui doivent être sérialisées.
Si la méthode ne retourne rien, alors &null; sera sérialisé, et une alerte de type
<constant>E_NOTICE</constant> sera émise.
</para>
<note>
<para>
Il n'est pas possible pour <link linkend="object.sleep">__sleep()</link> de retourner
des noms de propriétés privées des classes parentes. Le faire
résultera en une erreur de niveau <constant>E_NOTICE</constant>.
Utiliser <link linkend="object.serialize">__serialize()</link> à la place.
</para>
</note>
<note>
<para>
À partir de PHP 8.0.0, retourner une valeur qui n'est pas un tableau depuis
<link linkend="object.sleep">__sleep()</link> émet un avertissement.
Auparavant une notice était émise.
</para>
</note>
<para>
Le but avoué de <link linkend="object.sleep">__sleep()</link> est de valider des données en attente
ou d'effectuer des opérations de nettoyage.
De plus, cette fonction est utile si un objet très large n'a pas besoin
d'être sauvegardé dans sa totalité.
</para>
<para>
Réciproquement, la fonction <function>unserialize</function> vérifie
la présence d'une méthode dont le nom est le nom magique
<link linkend="object.wakeup">__wakeup()</link>. Si elle est présente, cette fonction
peut reconstruire toute ressource que l'objet pourrait posséder.
</para>
<para>
Le but avoué de <link linkend="object.wakeup">__wakeup()</link> est de rétablir
toute connexion de base de données qui aurait été perdue
durant la sérialisation et d'effectuer des tâches de réinitialisation.
</para>
<example>
<title>Utilisation de sleep() et wakeup()</title>
<programlisting role="php">
<![CDATA[
<?php
class Connection
{
protected $link;
private $dsn, $username, $password;
public function __construct($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
$this->connect();
}
private function connect()
{
$this->link = new PDO($this->dsn, $this->username, $this->password);
}
public function __sleep()
{
return array('dsn', 'username', 'password');
}
public function __wakeup()
{
$this->connect();
}
}
?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.magic.serialize">
<title>
<link linkend="object.serialize">__serialize()</link> et
@@ -268,6 +173,112 @@ class Connection
</example>
</sect2>
<sect2 xml:id="language.oop5.magic.sleep">
<title>
<link linkend="object.sleep">__sleep()</link> et
<link linkend="object.wakeup">__wakeup()</link>
</title>
<warning>
<simpara>
Ce mécanisme de sérialisation est soft-deprecated à partir de PHP 8.5.0.
Il est maintenu pour la rétrocompatibilité.
Cependant, le code nouveau et existant devrait migrer vers l'utilisation des
méthodes magiques
<link linkend="object.serialize">__serialize()</link> et
<link linkend="object.unserialize">__unserialize()</link>
à la place.
</simpara>
</warning>
<methodsynopsis xml:id="object.sleep">
<modifier>public</modifier> <type>array</type><methodname>__sleep</methodname>
<void/>
</methodsynopsis>
<methodsynopsis xml:id="object.wakeup">
<modifier>public</modifier> <type>void</type><methodname>__wakeup</methodname>
<void/>
</methodsynopsis>
<para>
<function>serialize</function> vérifie si la classe a une méthode avec le
nom magique <link linkend="object.sleep">__sleep()</link>.
Si c'est le cas, cette méthode sera exécutée avant toute sérialisation. Elle peut
nettoyer l'objet, et elle est supposée retourner un tableau avec les noms de toutes
les variables de l'objet qui doivent être sérialisées.
Si la méthode ne retourne rien, alors &null; sera sérialisé, et une alerte de type
<constant>E_NOTICE</constant> sera émise.
</para>
<note>
<para>
Il n'est pas possible pour <link linkend="object.sleep">__sleep()</link> de retourner
des noms de propriétés privées des classes parentes. Le faire
résultera en une erreur de niveau <constant>E_NOTICE</constant>.
Utiliser <link linkend="object.serialize">__serialize()</link> à la place.
</para>
</note>
<note>
<para>
À partir de PHP 8.0.0, retourner une valeur qui n'est pas un tableau depuis
<link linkend="object.sleep">__sleep()</link> émet un avertissement.
Auparavant une notice était émise.
</para>
</note>
<para>
Le but avoué de <link linkend="object.sleep">__sleep()</link> est de valider des données en attente
ou d'effectuer des opérations de nettoyage.
De plus, cette fonction est utile si un objet très large n'a pas besoin
d'être sauvegardé dans sa totalité.
</para>
<para>
Réciproquement, la fonction <function>unserialize</function> vérifie
la présence d'une méthode dont le nom est le nom magique
<link linkend="object.wakeup">__wakeup()</link>. Si elle est présente, cette fonction
peut reconstruire toute ressource que l'objet pourrait posséder.
</para>
<para>
Le but avoué de <link linkend="object.wakeup">__wakeup()</link> est de rétablir
toute connexion de base de données qui aurait été perdue
durant la sérialisation et d'effectuer des tâches de réinitialisation.
</para>
<example>
<title>Utilisation de sleep() et wakeup()</title>
<programlisting role="php">
<![CDATA[
<?php
class Connection
{
protected $link;
private $dsn, $username, $password;
public function __construct($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
$this->connect();
}
private function connect()
{
$this->link = new PDO($this->dsn, $this->username, $this->password);
}
public function __sleep()
{
return array('dsn', 'username', 'password');
}
public function __wakeup()
{
$this->connect();
}
}?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.magic.tostring">
<title><link linkend="object.tostring">__toString()</link></title>
<methodsynopsis xml:id="object.tostring">