[DOC-CVS] [doc-en] master: Move __sleep()/__wakeup() after __serialize()/unserialize() (#5427)

[email protected] (Gina Peter Banyard via GitHub) Mon, 16 Mar 2026 14:12:15 +0000
Newsgroups php.doc.cvs
Message-ID <[email protected]>
Author: Gina Peter Banyard (Girgias)
Committer: GitHub (web-flow)
Pusher: Girgias
Date: 2026-03-16T14:12:11Z

Commit: https://github.com/php/doc-en/commit/8f51247cb4631b29686f867bd904dfe5b2678074
Raw diff: https://github.com/php/doc-en/commit/8f51247cb4631b29686f867bd904dfe5b2678074.diff

Move __sleep()/__wakeup() after __serialize()/unserialize() (#5427)

This is part of https://wiki.php.net/rfc/soft-deprecate-sleep-wakeup

Changed paths:
  M  language/oop5/magic.xml


Diff:

diff --git a/language/oop5/magic.xml b/language/oop5/magic.xml
index fc30bbcbdabc..425f3c0a6c6f 100644
--- a/language/oop5/magic.xml
+++ b/language/oop5/magic.xml
@@ -24,10 +24,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>,
@@ -63,98 +63,6 @@
     otherwise a fatal error is emitted.
    </para>
   </warning>
- 
-  <sect2 xml:id="language.oop5.magic.sleep">
-   <title>
-    <link linkend="object.sleep">__sleep()</link> and
-    <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> checks if the class has a function with
-    the magic name <link linkend="object.sleep">__sleep()</link>. If so, that function is
-    executed prior to any serialization. It can clean up the object
-    and is supposed to return an array with the names of all variables
-    of that object that should be serialized.
-    If the method doesn't return anything then &null; is serialized and
-    <constant>E_NOTICE</constant> is issued.
-   </para>
-   <note>
-    <para>
-     It is not possible for <link linkend="object.sleep">__sleep()</link> to return names of
-     private properties in parent classes. Doing this will result in an
-     <constant>E_NOTICE</constant> level error.
-     Use <link linkend="object.serialize">__serialize()</link> instead.
-    </para>
-   </note>
-   <note>
-    <para>
-     As of PHP 8.0.0, returning a value which is not an array from <link linkend="object.sleep">__sleep()</link> generates a warning. Previously, it generated a notice.
-    </para>
-   </note>
-   <para>
-    The intended use of <link linkend="object.sleep">__sleep()</link> is to commit pending
-    data or perform similar cleanup tasks. Also, the function is
-    useful if a very large object doesn't need to be saved completely.
-   </para>
-   <para>
-    Conversely, <function>unserialize</function> checks for the
-    presence of a function with the magic name 
-    <link linkend="object.wakeup">__wakeup()</link>. If present, this function can
-    reconstruct any resources that the object may have.
-   </para>
-   <para>
-    The intended use of <link linkend="object.wakeup">__wakeup()</link> is to
-    reestablish any database connections that may have been lost
-    during serialization and perform other reinitialization
-    tasks.
-   </para>
-   <example>
-    <title>Sleep and 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>
@@ -257,6 +165,109 @@ class Connection
    </example>
   </sect2>
 
+ <sect2 xml:id="language.oop5.magic.sleep">
+  <title>
+   <link linkend="object.sleep">__sleep()</link> and
+   <link linkend="object.wakeup">__wakeup()</link>
+  </title>
+
+  <warning>
+   <simpara>
+    This serialization mechanism is soft-deprecated as of PHP 8.5.0.
+    It is maintained for backward compatibility.
+    However, new and existing code should be migrated to use the
+    <link linkend="object.serialize">__serialize()</link> and
+    <link linkend="object.unserialize">__unserialize()</link>
+    magic methods instead.
+   </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> checks if the class has a function with
+   the magic name <link linkend="object.sleep">__sleep()</link>. If so, that function is
+   executed prior to any serialization. It can clean up the object
+   and is supposed to return an array with the names of all variables
+   of that object that should be serialized.
+   If the method doesn't return anything then &null; is serialized and
+   <constant>E_NOTICE</constant> is issued.
+  </para>
+  <note>
+   <para>
+    It is not possible for <link linkend="object.sleep">__sleep()</link> to return names of
+    private properties in parent classes. Doing this will result in an
+    <constant>E_NOTICE</constant> level error.
+    Use <link linkend="object.serialize">__serialize()</link> instead.
+   </para>
+  </note>
+  <note>
+   <para>
+    As of PHP 8.0.0, returning a value which is not an array from <link linkend="object.sleep">__sleep()</link> generates a warning. Previously, it generated a notice.
+   </para>
+  </note>
+  <para>
+   The intended use of <link linkend="object.sleep">__sleep()</link> is to commit pending
+   data or perform similar cleanup tasks. Also, the function is
+   useful if a very large object doesn't need to be saved completely.
+  </para>
+  <para>
+   Conversely, <function>unserialize</function> checks for the
+   presence of a function with the magic name
+   <link linkend="object.wakeup">__wakeup()</link>. If present, this function can
+   reconstruct any resources that the object may have.
+  </para>
+  <para>
+   The intended use of <link linkend="object.wakeup">__wakeup()</link> is to
+   reestablish any database connections that may have been lost
+   during serialization and perform other reinitialization
+   tasks.
+  </para>
+  <example>
+   <title>Sleep and 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">