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>-></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>-></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>