com doc/fr: Apply commit 9ee9eccf455188ab6eb352194eb6f9eb99e15606: language/oop5/abstract.xml language/oop5/autoload.xml language/oop5/basic.xml language/oop5/cloning.xml language/oop5/decon.xml language/oop5/final.xml language/oop5/inheritance.xml language/oop5/interfaces.xml language/oop5/late-static-bindings.xml language/oop5/magic.xml language/oop5/overloading.xml language/oop5/properties.xml language/oop5/serialization.xml language/oop5/stat

[email protected] (George Peter Banyard) Wed, 17 Mar 2021 14:52:17 +0000
Newsgroups php.doc.fr
Message-ID <[email protected]>
Commit:    66e0862a746f3061a65475c0d2b9ae485dbf34a1
Author:    George Peter Banyard <[email protected]>         Wed, 17 Mar 2021 14:52:17 +0000
Parents:   a71613b329b68c6f3e72994495c1954287bc599f
Branches:  master

Link:       http://git.php.net/?p=doc/fr.git;a=commitdiff;h=66e0862a746f3061a65475c0d2b9ae485dbf34a1

Log:
Apply commit 9ee9eccf455188ab6eb352194eb6f9eb99e15606

Refactor OO section part 2

Changed paths:
  M  language/oop5/abstract.xml
  M  language/oop5/autoload.xml
  M  language/oop5/basic.xml
  M  language/oop5/cloning.xml
  M  language/oop5/decon.xml
  M  language/oop5/final.xml
  M  language/oop5/inheritance.xml
  M  language/oop5/interfaces.xml
  M  language/oop5/late-static-bindings.xml
  M  language/oop5/magic.xml
  M  language/oop5/overloading.xml
  M  language/oop5/properties.xml
  M  language/oop5/serialization.xml
  M  language/oop5/static.xml
  M  language/oop5/traits.xml
  M  language/oop5/visibility.xml
diff_66e0862a746f3061a65475c0d2b9ae485dbf34a1.txt (text/plain, 30.1 KB)
diff --git a/language/oop5/abstract.xml b/language/oop5/abstract.xml
index d320c421e6..c56a975e8c 100644
--- a/language/oop5/abstract.xml
+++ b/language/oop5/abstract.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
 <sect1 xml:id="language.oop5.abstract" xmlns="http://docbook.org/ns/docbook">
  <title>Abstraction de classes</title>
@@ -17,15 +17,9 @@
  <para>
   Lors de l'héritage d'une classe abstraite, toutes les méthodes
   marquées comme abstraites dans la déclaration de la classe parente
-  doivent être définies par l'enfant ; de plus, ces méthodes doivent être
-  définies avec la même <link linkend="language.oop5.visibility">visibilité</link>,
-  ou une visibilité moins restreinte. Par exemple, si la méthode abstraite 
-  est définie comme protégée, l'implémentation de la fonction doit être 
-  définie comme protégée ou publique, mais pas privée. De plus, les signatures
-  de ces méthodes doivent correspondre, ce qui signifie que les types des paramètres et
-  le nombre d'arguments requis doivent être les mêmes. Par exemple, si la classe
-  enfant définit un argument optionnel, alors que la signature de la méthode
-  abstraite ne le définit pas, il n'y aura aucun conflit dans la signature.
+  doivent être définies par la classe enfant et suivre les règles habituelles
+  d'<link linkend="language.oop5.inheritance">héritage</link> et de
+  <link linkend="language.oop.lsp">compatibilité de signature</link>.
  </para>
  
  <example>
@@ -130,13 +124,6 @@ Mrs. Pacwoman
 ]]>
    </screen>
   </example>
- 
- <para>
-  L'ancien code qui n'a pas de classe définie par l'utilisateur
-  ou de fonction nommée 'abstract' devrait continuer à fonctionner
-  sans modification.
- </para>
- 
 </sect1>
 <!-- Keep this comment at the end of the file
 Local variables:
diff --git a/language/oop5/autoload.xml b/language/oop5/autoload.xml
index 925c898c06..bbb835faf2 100644
--- a/language/oop5/autoload.xml
+++ b/language/oop5/autoload.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 99b8716337e2c27b6addf7e184b8ac7a50bb38b0 Maintainer: jpauli Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: jpauli Status: ready -->
 <!-- Reviewed: no -->
 <sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook">
  <title>Auto-chargement de classes</title>
@@ -17,27 +17,15 @@
   En enregistrant des autochargeurs, PHP donne une dernière chance d'inclure une
   définition de classe ou interface, avant que PHP n'échoue avec une erreur.
  </para>
- <tip>
+ <caution>
   <para>
-   Bien que la fonction <function>__autoload</function> puisse également être 
-   utilisée pour le chargement automatique des classes et des interfaces, il 
-   est préférable d'utiliser la fonction <function>spl_autoload_register</function>. 
-   Cela est dû au fait qu'il s'agit d'une alternative plus flexible (permettant 
-   de spécifier un nombre quelconque de chargeurs automatique dans l'application, 
-   par exemple dans les bibliothèques tierces).
-   Pour cette raison, l'utilisation de <function>__autoload</function> est
-   découragée et est obsolète à partir de PHP 7.2.
+   Antérieur à PHP 8.0.0, il était possible d'utiliser <function>__autoload</function>
+   pour autocharger les classes et interfaces. Cependant c'est une alternative
+   moins flexible à <function>spl_autoload_register</function> et
+   <function>__autoload</function> est obsolète à partir de PHP 7.2.0,
+   et supprimée à partir de PHP 8.0.0.
   </para>
- </tip>
- <note>
-  <para>
-   Si le nom de la classe est utilisé par exemple dans la fonction
-   <function>call_user_func</function>, alors il peut contenir des caractères
-   dangereux comme <literal>../</literal>. Il est recommandé de ne pas utiliser
-   d'entrées utilisateur dans de telles fonctions, ou, au moins, de vérifier l'entrée
-   dans la fonction <function>__autoload</function>.
-  </para>
- </note>
+ </caution>
  <para>
   <example>
    <title>Exemple avec <function>__autoload</function></title>
diff --git a/language/oop5/basic.xml b/language/oop5/basic.xml
index 13b7baf356..39dcf42ef0 100644
--- a/language/oop5/basic.xml
+++ b/language/oop5/basic.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 02f3bf57175c48abff767ad2c0961c6cfe58a39e Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.basic" xmlns="http://docbook.org/ns/docbook">
   <title>Syntaxe de base</title>
@@ -553,10 +553,10 @@ Stack trace:
 
    <para>
     Le mot clé <literal>class</literal> est également utilisé
-    pour la résolution des noms de classes. Vous pouvez récupérer une chaîne
-    contenant le nom qualifié complet de la classe <literal>ClassName</literal>
-    en utilisant <literal>ClassName::class</literal>. C'est particulièrement
-    pratique avec les classes utilisant des
+    pour la résolution des noms de classes.
+    Il est possible d'obtenir le nom complètement qualifié d'une classe
+    <literal>ClassName</literal> en utilisant <literal>ClassName::class</literal>.
+    C'est particulièrement utile avec les classes utilisant des
     <link linkend="language.namespaces">espaces de noms</link>.
    </para>
    <para>
diff --git a/language/oop5/cloning.xml b/language/oop5/cloning.xml
index c2bca9c6dc..6d674ae87d 100644
--- a/language/oop5/cloning.xml
+++ b/language/oop5/cloning.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
-<!-- Reviewed: yes -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
+<!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.cloning" xmlns="http://docbook.org/ns/docbook">
   <title>Clonage d'objets</title>
 
@@ -17,12 +17,9 @@
   </para>
 
   <para>
-   Une copie d'objet est créée en utilisant le mot-clé 
-   <emphasis>clone</emphasis> (qui fait appel à la méthode 
-   <link linkend="object.clone">__clone()</link>
+   Une copie d'objet est créée en utilisant le mot-clé <literal>clone</literal>
+   (qui fait appel à la méthode <link linkend="object.clone">__clone()</link>
    de l'objet, si elle a été définie).
-   La méthode <link linkend="object.clone">__clone()</link>
-   d'un objet ne peut être appelée directement.
   </para>
 
   <informalexample>
diff --git a/language/oop5/decon.xml b/language/oop5/decon.xml
index 0d12baa682..91a607d2bc 100644
--- a/language/oop5/decon.xml
+++ b/language/oop5/decon.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 4317fec7555dd42621f88162cc5068092e5c5cfb Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.decon" xmlns="http://docbook.org/ns/docbook">
   <title>Constructeurs et destructeurs</title>
@@ -166,9 +166,9 @@ class Point {
     </note>
     <note>
      <para>
-      <!-- This should be linked once attributes are documented. -->
-      Les attributs placé sur un argument de constructeur promu seront reproduit
-      à la fois sur la propriété ainsi que sur l'argument.
+      Les <link linkend="language.attributes">attributs</link> placé sur un
+      argument de constructeur promu seront reproduit à la fois sur la
+      propriété ainsi que sur l'argument.
      </para>
     </note>
    </sect3>
@@ -207,7 +207,7 @@ class Product {
     }
 
     public static function fromXml(string $xml): static {
-        // Put your own logic here.
+        // Logique personnalisé.
         $data = convert_xml_to_array($xml);
         $new = new static();
         $new->id = $data['id'];
diff --git a/language/oop5/final.xml b/language/oop5/final.xml
index d2041b02b3..11cd8c6dd3 100644
--- a/language/oop5/final.xml
+++ b/language/oop5/final.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.final" xmlns="http://docbook.org/ns/docbook">
   <title>Mot-clé "final"</title>
   <para>
    Le mot-clé <literal>final</literal> empêche les classes enfants de surcharger une méthode
-   en préfixant la définition avec <emphasis>final</emphasis>. Si la classe elle-même est 
+   en préfixant la définition avec <literal>final</literal>. Si la classe elle-même est
    définie comme finale, elle ne pourra pas être étendue.
   </para>
   
@@ -49,7 +49,7 @@ final class BaseClass {
        echo "BaseClass::test() appelée\n";
    }
 
-   // Ici, peu importe si vous spécifiez la fonction en finale ou pas
+   // Comme la classe est déjà finale, le mot clé final est redondant
    final public function moreTesting() {
        echo "BaseClass::moreTesting() appelée\n";
    }
diff --git a/language/oop5/inheritance.xml b/language/oop5/inheritance.xml
index c2160c1453..2fd1c6d2f6 100644
--- a/language/oop5/inheritance.xml
+++ b/language/oop5/inheritance.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: be8c27a5f315a5e91bdd5f39a951c7759c143567 Maintainer: yannick Status: ready -->
-<!-- Reviewed: yes -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
+<!-- Reviewed: no -->
 
 <sect1 xml:id="language.oop5.inheritance" xmlns="http://docbook.org/ns/docbook">
  <title>Héritage</title>
@@ -11,8 +11,9 @@
   de nombreuses classes sont en relation les unes avec les autres.
  </para>
  <para>
-  Par exemple, lorsque vous étendez une classe, la classe fille hérite de toutes
-  les méthodes publiques et protégées de la classe parente. Tant qu'une classe n'écrase
+  Par exemple, lorsque une classe est étendu, la classe enfant hérite de toutes
+  les méthodes publiques et protégées, propriétés et constantes de la classe parente.
+  Tant qu'une classe n'écrase
   pas ces méthodes, elles conservent leur fonctionnalité d'origine.
  </para>
  <para>
@@ -21,6 +22,13 @@
   fonctionnalités supplémentaires dans les classes enfants, sans avoir à réimplémenter
   en leur sein toutes les fonctionnalités communes.
  </para>
+ <para>
+  La <link linkend="language.oop5.visibility">visibilité</link>
+  des méthodes, propriétés et constantes peut être relaxé, c.à.d. une
+  méthode <literal>protected</literal> peut être marqué comme
+  <literal>public</literal>, mais elles ne peuvent pas être restraint, e.g.
+  marquer une propriété <literal>public</literal> comme <literal>private</literal>.
+ </para>
  
  <note>
    <para>
diff --git a/language/oop5/interfaces.xml b/language/oop5/interfaces.xml
index 1be3714771..85d2109c8f 100644
--- a/language/oop5/interfaces.xml
+++ b/language/oop5/interfaces.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 4317fec7555dd42621f88162cc5068092e5c5cfb Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.interfaces" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
   <title>Interfaces</title>
@@ -19,12 +19,17 @@
    De par la nature même d'une interface, toutes les méthodes déclarées dans une
    interface doivent être publiques.
   </para>
-  <para>
-   Il est à noter qu'il est possible de déclarer un <link
-   linkend="language.oop5.decon.constructor">constructeur</link> dans une
-   interface, ce qui peut être utile dans certains contextes, par exemple
-   pour une utilisation par les factory.
-  </para>
+
+  <note>
+   <para>
+    Il est possible de déclarer des
+    <link linkend="language.oop5.magic">méthodes magiques</link> tel que le
+    <link linkend="language.oop5.decon.constructor">constructeur</link>
+    dans une interface, cei peut être utile dans certain contextes, par exemple
+    pour usage avec des factories.
+   </para>
+  </note>
+
   <sect2 xml:id="language.oop5.interfaces.implements">
    <title><literal>implements</literal></title>
    <para>
diff --git a/language/oop5/late-static-bindings.xml b/language/oop5/late-static-bindings.xml
index ae4355b0e6..0498456d29 100644
--- a/language/oop5/late-static-bindings.xml
+++ b/language/oop5/late-static-bindings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: jpauli Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: jpauli Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.late-static-bindings" xmlns="http://docbook.org/ns/docbook">
   <title>Late Static Bindings (Résolution statique à la volée)</title>
@@ -85,7 +85,7 @@ A
     La résolution statique à la volée essaie de dépasser cette limitation
     en introduisant un mot clé qui fait référence à la classe
     qui a été appelée durant l'exécution. Pour faire simple, ce mot-clé
-    vous permet de faire référence à <literal>B</literal> depuis
+    permet le référencement à <literal>B</literal> depuis
     <literal>test()</literal>, dans l'exemple précédent.
     Il a été décidé de ne pas introduire de nouveau mot clé, mais
     plutôt d'utiliser le mot <literal>static</literal> qui était déjà
diff --git a/language/oop5/magic.xml b/language/oop5/magic.xml
index 8e7a988c50..fc97bd9036 100644
--- a/language/oop5/magic.xml
+++ b/language/oop5/magic.xml
@@ -1,47 +1,66 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
   <title>Méthodes magiques</title>
   <para>
-   Les noms de méthodes
-   <link linkend="object.construct">__construct()</link>,
-   <link linkend="object.destruct">__destruct()</link>,
-   <link linkend="object.call">__call()</link>,
-   <link linkend="object.callstatic">__callStatic()</link>,
-   <link linkend="object.get">__get()</link>,
-   <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.tostring">__toString()</link>,
-   <link linkend="object.invoke">__invoke()</link>,
-   <link linkend="object.set-state">__set_state()</link>
-   <link linkend="object.clone">__clone()</link> et
-   <link linkend="object.debuginfo">__debugInfo()</link>
-   sont magiques dans les classes PHP. Vous ne pouvez pas utiliser ces noms de méthodes
-   dans vos classes, sauf si vous voulez implémenter 
-   le comportement associé à ces méthodes magiques.
+   Les méthodes magiques sont des méthodes spéciales qui écrase l'action
+   par défaut de PHP quand certaines actions sont réalisées sur un objet.
   </para>
+ <caution>
+  <simpara>
+   Toutes les méthodes commençant par <literal>__</literal> sont réservé par PHP.
+   Ainsi, il n'est pas recommandé d'utiliser un tel nom de méthode sauf lors
+   de l'écrasage du comportement de PHP.
+  </simpara>
+ </caution>
+ <para>
+  Les méthodes suivantes sont considérées magiques :
+  <!-- Should be an itemized list ? -->
+  <link linkend="object.construct">__construct()</link>,
+  <link linkend="object.destruct">__destruct()</link>,
+  <link linkend="object.call">__call()</link>,
+  <link linkend="object.callstatic">__callStatic()</link>,
+  <link linkend="object.get">__get()</link>,
+  <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.tostring">__toString()</link>,
+  <link linkend="object.invoke">__invoke()</link>,
+  <link linkend="object.set-state">__set_state()</link>
+  <link linkend="object.clone">__clone()</link>, et
+  <link linkend="object.debuginfo">__debugInfo()</link>.
+ </para>
   
-  <note>
+  <warning>
    <simpara>
-    Toutes les méthodes magiques <emphasis>DOIVENT</emphasis> être déclarées en <literal>public</literal>
+    Toutes les méthodes magiques, à l'exception de
+    <link linkend="object.construct">__construct()</link>,
+    <link linkend="object.destruct">__destruct()</link>, et
+    <link linkend="object.clone">__clone()</link>,
+    <emphasis>doivent</emphasis> être déclaré en tant que <literal>public</literal>,
+    sinon une <constant>E_WARNING</constant> est émise.
+    Antérieur à PHP 8.0.0, aucun diagnostic n'était émis pour les méthodes magiques
+    <link linkend="object.sleep">__sleep()</link>,
+    <link linkend="object.wakeup">__wakeup()</link>,
+    <link linkend="object.serialize">__serialize()</link>,
+    <link linkend="object.unserialize">__unserialize()</link>, et
+    <link linkend="object.set-state">__set_state()</link>.
    </simpara>
-  </note>
-
-  <caution>
-   <simpara>
-    PHP réserve tous les noms de fonctions commençant par un double souligné
-    <literal>__</literal> pour les méthodes magiques. Il est recommandé de
-    ne pas utiliser de noms de fonctions commençant par <literal>__</literal>
-    sauf si vous voulez des fonctionnalités magiques documentées.
-   </simpara>
-  </caution>
+  </warning>
+ <warning>
+  <para>
+   Si des déclarations de types sont utilisé dans la définition d'une méthode
+   magique, elles doivent être identique à la signature décrit dans ce document.
+   Sinon, une erreur fatale est émise.
+   Antérieur à PHP 8.0.0, aucun diagnostic n'était émis.
+  </para>
+ </warning>
  
   <sect2 xml:id="language.oop5.magic.sleep">
    <title>
@@ -72,14 +91,14 @@
      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>.
-     À la place, vous devriez utiliser l'interface <classname>Serializable</classname>.
+     Utilisez <link linkend="object.serialize">__serialize()</link> à la place.
     </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 vous avez de très gros objets
-    qui n'ont pas besoin d'être sauvegardés en totalité.
+    De plus, cette fonction est utile si un objet très large n'a pas besoin
+    d'être sauvegardés dans sa totalité.
    </para>
    <para>
     Réciproquement, la fonction <function>unserialize</function> vérifie
@@ -250,15 +269,31 @@ class Connection
    <para>
     La méthode <link linkend="object.tostring">__toString()</link> détermine comment l'objet
     doit réagir lorsqu'il est traité comme une chaîne de caractères.
-    Par exemple, ce que <literal>echo $obj;</literal> affichera. Cette méthode doit
-    retourner une chaîne, sinon une erreur <constant>E_RECOVERABLE_ERROR</constant>
-    sera levée.
+    Par exemple, ce que <literal>echo $obj;</literal> affichera.
    </para>
    <warning>
+    <para>
+     À partir de PHP 8.0.0, la valeur de retour suit les sémantiques standard
+     de PHP, signifiant que la valeur sera convertie en une <type>string</type>
+     si possible et si le
+     <link linkend="language.types.declarations.strict">typage stricte</link>
+     est désactivé.
+    </para>
+    <para>
+     En PHP 7.4, la valeur de retour <emphasis>doit</emphasis> être une
+     <type>string</type>, sinon une <classname>Error</classname> est lancé.
+    </para>
+    <para>
+     Antérieur à PHP 7.4.0, la valeur de retour <emphasis>doit</emphasis>
+     être une <type>string</type>, sinon une <constant>E_RECOVERABLE_ERROR</constant>
+     fatale est émise.
+    </para>
+   </warning>
+   <warning>
     <simpara>
      Il était impossible de lancer une exception depuis la méthode
-     <link linkend="object.tostring">__toString()</link> avant PHP 7.4.0.
-     En faisant ceci une erreur fatale en résultera.
+     <link linkend="object.tostring">__toString()</link> antérieur à PHP 7.4.0.
+     Cela entraînera une erreur fatale.
     </simpara>
    </warning>
    <example>
@@ -348,13 +383,12 @@ bool(true)
    </para>
    <para>
     Le seul paramètre de cette méthode est un tableau contenant les propriétés
-    exportées sous la forme <literal>array('propriété' => valeur, ...)</literal>.
+    exportées sous la forme <literal>['property' => value, ...]</literal>.
    </para>
    <example>
     <title>Utilisation de <link linkend="object.set-state">__set_state()</link></title>
     <programlisting role="php">
 <![CDATA[
-<?php
 
 class A
 {
@@ -374,18 +408,20 @@ $a = new A;
 $a->var1 = 5;
 $a->var2 = 'foo';
 
-eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
-                                            //    'var1' => 5,
-                                            //    'var2' => 'foo',
-                                            // ));
+$b = var_export($a, true);
 var_dump($b);
-
+eval('$c = ' . $b . ';');
+var_dump($c);
 ?>
 ]]>
     </programlisting>
     &example.outputs;
     <screen>
 <![CDATA[
+string(60) "A::__set_state(array(
+   'var1' => 5,
+   'var2' => 'foo',
+))"
 object(A)#2 (2) {
   ["var1"]=>
   int(5)
diff --git a/language/oop5/overloading.xml b/language/oop5/overloading.xml
index 8de51e2d2c..88287fdfe4 100644
--- a/language/oop5/overloading.xml
+++ b/language/oop5/overloading.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.overloading" xmlns="http://docbook.org/ns/docbook">
   <title>Surcharge magique</title>
diff --git a/language/oop5/properties.xml b/language/oop5/properties.xml
index 1dba02796b..d61f7a415c 100644
--- a/language/oop5/properties.xml
+++ b/language/oop5/properties.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 02f3bf57175c48abff767ad2c0961c6cfe58a39e Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
 <sect1 xml:id="language.oop5.properties" xmlns="http://docbook.org/ns/docbook">
  <title>Propriétés</title>
@@ -44,11 +44,8 @@
  </para>
  <para>
   La pseudo-variable <varname>$this</varname> est disponible au sein de n'importe
-  quelle méthode, lorsque cette méthode est appelée depuis un objet.
-  <varname>$this</varname> est la valeur de l'objet appelant (en général l'objet
-  auquel la méthode appartient, mais il peut s'agir d'un autre objet si la méthode
-  est appelée de façon <link linkend="language.oop5.static">statique</link> depuis
-  le contexte d'un second objet).
+  quelle méthode, lorsque cette méthode est appelée au sein d'un objet.
+  <varname>$this</varname> est la valeur de l'objet appelant.
  </para>
  
  <para>
@@ -83,9 +80,8 @@ EOD;
 
  <note>
   <para>
-   Il existe des fonctions qui permettent de gérer des classes et des objets.
-   Vous voudrez peut-être jeter un coup d'œil à <link linkend="ref.classobj">Fonctions
-   Classes/Objets</link>.
+   Il existe des fonctions diverses qui permettent de gérer des classes et des objets.
+   Voir la référence sur les <link linkend="ref.classobj">Fonctions Classes/Objets</link>.
   </para>
  </note>
 
diff --git a/language/oop5/serialization.xml b/language/oop5/serialization.xml
index e7fc5cf7ac..1cbb7bff39 100644
--- a/language/oop5/serialization.xml
+++ b/language/oop5/serialization.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
+<!-- TODO Rewrite to remove usage of "you" and talk about __serialize/_unserialize -->
 <sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
  <title>Sérialisation d'objets</title>
  <title>Sérialiser des objets - des objets en session</title>
diff --git a/language/oop5/static.xml b/language/oop5/static.xml
index 5cd01bd472..ee6f602c01 100644
--- a/language/oop5/static.xml
+++ b/language/oop5/static.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
   <title>Statique</title>
@@ -20,9 +20,8 @@
   
   <para>
    Le fait de déclarer des propriétés ou des méthodes comme statiques vous
-   permet d'y accéder sans avoir besoin d'instancier la classe. On ne peut
-   accéder à une propriété déclarée comme statique avec l'objet instancié d'une
-   classe (bien que ce soit possible pour une méthode statique).
+   permet d'y accéder sans avoir besoin d'instancier la classe.
+   Ceci peuvent être accédé statiquement depuis une instance d'objet.
   </para>
 
   <sect2 xml:id="language.oop5.static.methods">
@@ -39,8 +38,8 @@
      Appeler une méthode non-statique statiquement lancera une <classname>Error</classname>.
     </para>
     <para>
-     Antérieur à PHP 8.0.0, appeler une méthode non-statique statiquement est obsolète,
-     et lèvera un avertissement <constant>E_DEPRECATED</constant>.
+     Antérieur à PHP 8.0.0, appeler une méthode non-statique statiquement était obsolète,
+     et générait un avertissement <constant>E_DEPRECATED</constant>.
     </para>
    </warning>
 
@@ -68,8 +67,10 @@ $classname::aStaticMethod();
   <sect2 xml:id="language.oop5.static.properties">
    <title>Propriétés statiques</title>
    <para>
-    On ne peut pas accéder à des propriétés statiques à travers l'objet en
-    utilisant l'opérateur <literal>-&gt;</literal>.
+    Les propriétés statiques sont accédées en utilisant l'
+    <link linkend="language.oop5.static">opérateur de résolution de portée</link>
+    (<literal>::</literal>) et ne peuvent pas être accédé à travers l'opérateur
+    objet (<literal>-&gt;</literal>).
    </para>
 
    <para>
@@ -123,9 +124,21 @@ print $bar->fooStatic() . "\n";
 ?>
 ]]>
    </programlisting>
+   &example.outputs.8.similar;
+   <screen>
+<![CDATA[
+foo
+foo
+Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
+Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
+foo
+foo
+foo
+foo
+]]>
+   </screen>
   </example>
   </sect2>
-  
  </sect1>
 <!-- Keep this comment at the end of the file
 Local variables:
diff --git a/language/oop5/traits.xml b/language/oop5/traits.xml
index 706183d520..f781242fa0 100644
--- a/language/oop5/traits.xml
+++ b/language/oop5/traits.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no Maintainer: itanea -->
 <sect1 xml:id="language.oop5.traits" xmlns="http://docbook.org/ns/docbook">
  <title>Traits</title>
@@ -455,7 +455,7 @@ trait PropertiesTrait {
 
 class PropertiesExample {
     use PropertiesTrait;
-    public $same = true; // Autorisé à partir de PHP 7.0.0; notice E_STRICT précédemment
+    public $same = true;
     public $different = true; // Fatal error
 }
 ?>
diff --git a/language/oop5/visibility.xml b/language/oop5/visibility.xml
index 553105f2d9..92f1d46489 100644
--- a/language/oop5/visibility.xml
+++ b/language/oop5/visibility.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: yannick Status: ready -->
+<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: yannick Status: ready -->
 <!-- Reviewed: no -->
  <sect1 xml:id="language.oop5.visibility" xmlns="http://docbook.org/ns/docbook">
   <title>Visibilité</title>
   <para>
     La visibilité d'une propriété, d'une méthode ou (à partir de PHP 7.1.0) une constante peut
-   être définie en préfixant sa déclaration avec un mot-clé : <emphasis>public</emphasis>,
-   <emphasis>protected</emphasis>, ou
-   <emphasis>private</emphasis>.
+   être définie en préfixant sa déclaration avec un mot-clé : <literal>public</literal>,
+   <literal>protected</literal>, ou
+   <literal>private</literal>.
    Les éléments déclarés comme publics sont accessibles partout.
    L'accès aux éléments protégés est limité à la classe elle-même, ainsi
    qu'aux classes qui en héritent et parente.
@@ -20,7 +20,7 @@
    <para>
     Les propriétés des classes doivent être définies comme
     publiques, protégées, ou privées. Si une propriété est déclarée en utilisant
-    <emphasis>var</emphasis>, elle sera alors définie comme publique.
+    <literal>var</literal>, elle sera alors définie comme publique.
    </para>
    <para>
     <example>