Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 110 additions & 4 deletions appendices/filters.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 3f1dbc451b313fb1ec8058f24c1beccf55fce316 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<!-- EN-Revision: 82b5e0afeb38142e91fbba05f06b46c3129420ba Maintainer: yannick Status: ready -->
<appendix xml:id="filters" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Liste des filtres disponibles</title>
<para>
Expand Down Expand Up @@ -286,7 +285,7 @@ fclose($fp);

<section xml:id="filters.compression.zlib">
<title>zlib.deflate et zlib.inflate</title>
<simpara>
<para>
<literal>zlib.deflate</literal> (compression) et
<literal>zlib.inflate</literal> (décompression) sont les implémentations
des méthodes de compression présentées dans la
Expand All @@ -306,12 +305,119 @@ fclose($fp);
occupent le moins d'espace en mémoire. Par défaut,
<parameter>window</parameter> vaut actuellement <literal>15</literal>.

Le filtre <literal>zlib.deflate</literal> implémente les méthodes de
compression <literal>DEFLATE</literal>, <literal>ZLIB</literal> et
<literal>GZIP</literal> selon la valeur du paramètre
<parameter>window</parameter>.

Les 4 bits de poids faible du paramètre window définissent la taille du
tampon d'historique interne, exprimée comme le logarithme en base 2 de
cette taille, entre 8 et 15. La signification des autres bits est décrite
ci-dessous.

<itemizedlist>
<listitem>
<simpara>
<literal>DEFLATE</literal> (<link xlink:href="&url.rfc;1951">RFC 1951</link>)
est un algorithme de compression brut, sans en-tête ni somme de contrôle.
Il est utilisé lorsque le paramètre window est compris entre -9 et -15.
Cet algorithme est la base de tous les formats générés par le filtre
<literal>zlib.deflate</literal>.
Les fonctions qui opèrent directement sur des chaînes sont
<function>gzdeflate</function> et <function>gzinflate</function>.
</simpara>
</listitem>

<listitem>
<simpara>
<literal>ZLIB</literal> (<link xlink:href="&url.rfc;1950">RFC 1950</link>)
applique l'algorithme <literal>DEFLATE</literal> et ajoute un en-tête de
2 octets et un trailer de 4 octets contenant la somme de contrôle Adler32
des données non compressées en ordre big-endian :
<literal><![CDATA[ZLIB = ENTETEZLIB(2o) DEFLATE ADLER32(4o)]]></literal>

L'en-tête de 2 octets, lu comme un entier non signé de 16 bits en
big-endian, doit être un multiple de 31.
Ce format est généré lorsque le paramètre window est compris entre 8 et 15.
Les fonctions qui opèrent directement sur des chaînes sont
<function>gzcompress</function> et <function>gzuncompress</function>.
</simpara>
</listitem>

<listitem>
<simpara>
<literal>GZIP</literal> (<link xlink:href="&url.rfc;1952">RFC 1952</link>)
applique l'algorithme <literal>DEFLATE</literal> en ajoutant un en-tête et
un trailer contenant la somme de contrôle <literal>CRC32</literal> des
données non compressées et leur longueur, tous deux en ordre little-endian :
<literal><![CDATA[GZIP = ENTETEGZIP(10o) DEFLATE CRC32(4o) LONGUEUR(4o)]]></literal>

C'est le format des fichiers <literal>.gz</literal>.
Ce format est généré lorsque le paramètre window est compris entre
9+16=25 et 15+16=31. La longueur des données non compressées est limitée
à 4 Go ; au-delà, seul le modulo 2^32 de la longueur réelle est stocké
dans la partie <literal>LONGUEUR</literal>.
Les fonctions qui opèrent directement sur des chaînes sont
<function>gzencode</function> et <function>gzdecode</function> ;
la fonction <function>gzopen</function> permet de lire et d'écrire des
fichiers <literal>.gz</literal>.
</simpara>
</listitem>
</itemizedlist>

Avec le filtre <literal>zlib.inflate</literal>, seul le paramètre
<parameter>window</parameter> est pris en compte ; tout autre paramètre
(<parameter>memory</parameter>, <parameter>level</parameter>) est ignoré.
En notant $W le logarithme en base 2 de la taille du tampon d'historique,
de sorte que 2^$W octets sont alloués par le décompresseur. Pour le format
ZLIB, cette valeur doit être supérieure ou égale à celle enregistrée dans
l'en-tête, vérifiée à la décompression ; pour les autres formats, elle doit
simplement être suffisamment grande pour les distances de correspondance
présentes dans les données.
La plage est 9 ≤ $W ≤ 15. En cas de doute, $W=15 est le choix le plus sûr.

<itemizedlist>
<listitem>
<simpara>
<literal>DEFLATE</literal> (<link xlink:href="&url.rfc;1951">RFC 1951</link>) :
utiliser window=-$W, avec $W au moins égal à la valeur utilisée à la
compression. En cas de doute, utiliser window=-15.
</simpara>
</listitem>

<listitem>
<simpara>
<literal>ZLIB</literal> (<link xlink:href="&url.rfc;1950">RFC 1950</link>) :
utiliser window=$W. La valeur de $W est disponible dans l'en-tête ZLIB,
sinon utiliser window=15.
</simpara>
</listitem>

<listitem>
<simpara>
<literal>GZIP</literal> (<link xlink:href="&url.rfc;1952">RFC 1952</link>) :
utiliser window=$W+16. Un en-tête GZIP ne contient pas la taille de
fenêtre, donc utiliser window=31 sauf si la valeur utilisée à la
compression est connue.
</simpara>
</listitem>

<listitem>
<simpara>
<literal>ZLIB ou GZIP</literal> :
utiliser window=$W+32 pour la détection automatique de l'en-tête, de
sorte que les deux formats puissent être reconnus et décompressés ;
window=15+32=47 est le choix le plus sûr.
</simpara>
</listitem>
</itemizedlist>

<parameter>memory</parameter> est une indication du niveau de mémoire
nécessaire.
Les valeurs valides vont de 1, pour l'allocation minimale, à 9, pour une
allocation maximale. L'allocation de mémoire affecte la vitesse d'exécution,
et n'a pas d'impact sur la taille de la charge utile générée.
</simpara>
</para>

<note>
<simpara>
Expand Down
19 changes: 18 additions & 1 deletion language/oop5/changelog.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: dff848b17dafaabfb7662ffb5fecfcb04e3b771d Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: 4fc9f9ea7ba36a383613ede343a0820f5cc46aa2 Maintainer: lacatoire Status: ready -->
<sect1 xml:id="language.oop5.changelog" xmlns="http://docbook.org/ns/docbook">
<title>Modifications en POO (Programmation orientée objet)</title>
<para>
Expand All @@ -16,6 +16,23 @@
</row>
</thead>
<tbody>
<row>
<entry>8.5.0</entry>
<entry>
Changement : Une méthode retournant <type>static</type> peut désormais
être redéfinie dans une classe <modifier>final</modifier> pour déclarer
<type>self</type> ou le type propre de la classe comme type de retour,
ces derniers étant équivalents à <type>static</type> dans une classe ne
pouvant pas être étendue davantage.
</entry>
</row>
<row>
<entry>8.5.0</entry>
<entry>
Changement : Les <link linkend="language.oop5.traits">traits</link> sont
désormais liés à une classe avant sa classe parente.
</entry>
</row>
<row>
<entry>8.4.0</entry>
<entry>
Expand Down
57 changes: 56 additions & 1 deletion language/oop5/cloning.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: dff848b17dafaabfb7662ffb5fecfcb04e3b771d Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: 09c650422aec6f59dca08d1c65eaa633d391a525 Maintainer: lacatoire Status: ready -->
<sect1 xml:id="language.oop5.cloning" xmlns="http://docbook.org/ns/docbook">
<title>Clonage d'objets</title>

Expand Down Expand Up @@ -157,6 +157,61 @@ echo (clone $dateTime)->format('Y');
]]>
</screen>
</example>

<sect2 xml:id="language.oop5.cloning.with-properties">
<title>Clonage avec remplacement de propriétés</title>

<simpara>
À partir de PHP 8.5.0, <literal>clone</literal> est également disponible
en tant que fonction, dont le second paramètre
<parameter>withProperties</parameter> accepte un tableau associant des noms
de propriétés aux valeurs que la copie doit recevoir. Seules les propriétés
listées sont remplacées ; toutes les autres conservent la valeur copiée.
</simpara>

<simpara>
Les remplacements sont appliqués après l'exécution de
<link linkend="object.clone">__clone()</link>, et ils respectent la
visibilité de toutes les propriétés.
Les propriétés <link linkend="language.oop5.properties.readonly-properties">readonly</link>
peuvent être mises à jour sur la copie même si elles étaient déjà définies
sur l'objet d'origine, ce qui rend la fonction adaptée aux méthodes
retournant une copie modifiée.
</simpara>

<example>
<title>Clonage d'un objet avec remplacement de propriétés</title>
<programlisting role="php">
<![CDATA[
<?php
class Point {
public function __construct(
public readonly int $x,
public readonly int $y,
) {}

public function withX(int $x): static
{
return clone($this, ['x' => $x]);
}
}

$p = new Point(1, 2);
$q = $p->withX(10);

echo $q->x, ' ', $q->y;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
10 2
]]>
</screen>
</example>
</sect2>

</sect1>
<!-- Keep this comment at the end of the file
Local variables:
Expand Down
15 changes: 14 additions & 1 deletion language/oop5/traits.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: dff848b17dafaabfb7662ffb5fecfcb04e3b771d Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: 4fc9f9ea7ba36a383613ede343a0820f5cc46aa2 Maintainer: lacatoire Status: ready -->
<sect1 xml:id="language.oop5.traits" xmlns="http://docbook.org/ns/docbook">
<title>Traits</title>
<para>
Expand Down Expand Up @@ -71,6 +71,19 @@ Hello World!
L'ordre de précédence fait en sorte que les méthodes de la classe courante
écrasent les méthodes issues d'un Trait, elles-mêmes surchargeant les méthodes héritées.
</para>
<note>
<simpara>
À partir de PHP 8.5.0, les traits sont liés à une classe avant sa classe
parente ; auparavant ils l'étaient après. Cela reflète plus fidèlement la
sémantique de copier-coller des traits. En particulier, lorsqu'un trait et
la classe parente déclarent tous deux une propriété ou une constante de même
nom, la définition du trait prend désormais le dessus sur celle héritée,
alors que les versions antérieures levaient une erreur fatale de composition
incompatible. La résolution des méthodes n'est pas affectée. Consultez
<link linkend="migration85.incompatible.core.trait-binding">le guide de
migration</link> pour plus de détails.
</simpara>
</note>
<example xml:id="language.oop5.traits.precedence.examples.ex1">
<title>Exemple avec l'ordre de précédence</title>
<para>
Expand Down
14 changes: 13 additions & 1 deletion language/oop5/variance.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: dff848b17dafaabfb7662ffb5fecfcb04e3b771d Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: 4fc9f9ea7ba36a383613ede343a0820f5cc46aa2 Maintainer: lacatoire Status: ready -->
<sect1 xml:id="language.oop5.variance" xmlns="http://docbook.org/ns/docbook">
<title>Covariance et Contravariance</title>

Expand Down Expand Up @@ -136,6 +136,18 @@ Mavrick barks
]]>
</screen>
</informalexample>
<note>
<simpara>
À partir de PHP 8.5.0, lorsqu'une méthode parente déclare <type>static</type>
comme type de retour, une méthode de substitution dans une classe
<modifier>final</modifier> peut déclarer <type>self</type> ou le type propre
de la classe comme type de retour à la place, puisque ces types sont
équivalents à <type>static</type> dans une classe qui ne peut pas être
étendue davantage. Consultez
<link linkend="migration85.incompatible.core.substitute-final-subclasses">le
guide de migration</link> pour plus de détails.
</simpara>
</note>
</sect2>

<sect2 xml:id="language.oop5.variance.contravariance">
Expand Down
18 changes: 17 additions & 1 deletion language/operators/comparison.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 62e61e543c2d2b8519952efa246ed708026cfb16 Maintainer: yannick Status: ready -->
<!-- EN-Revision: 4fc9f9ea7ba36a383613ede343a0820f5cc46aa2 Maintainer: lacatoire Status: ready -->
<sect1 xml:id="language.operators.comparison">
<title>Opérateurs de comparaison</title>
<titleabbrev>Comparaison</titleabbrev>
Expand Down Expand Up @@ -367,6 +367,22 @@ function standard_array_compare($op1, $op2)
Le résultat de la comparaison des valeurs incomparables est indéfini,
et ne devrait pas être utilisé.
</simpara>
<note>
<simpara>
À partir de PHP 8.5.0, la comparaison lâche d'un <type>object</type> non
comparable (comme un enum, <classname>CurlHandle</classname> ou une autre
classe interne) avec un <type>bool</type> via <literal>==</literal> ou
<literal>!=</literal> est évaluée de manière cohérente comme si l'objet
était converti en <type>bool</type>, c'est-à-dire
<literal>(bool) $object</literal>. Comme un tel objet est toujours converti
en &true;, il est égal à &true; et différent de &false;. Avant PHP 8.5.0,
cela ne s'appliquait que lors de la comparaison avec un littéral booléen
(<literal>$object == true</literal>) ; la comparaison avec une valeur
booléenne dans une variable retournait toujours &false;. Consultez
<link linkend="migration85.incompatible.core.loosely-comparing-object">le
guide de migration</link> pour plus de détails.
</simpara>
</note>
</sect2>

<sect2 role="seealso">
Expand Down
29 changes: 28 additions & 1 deletion language/operators/precedence.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 80dfa568e602649eb13585bf59a7b6239eddaac3 Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: 3a94de0974207a5704bb9f04377a2ea2baf487ba Maintainer: lacatoire Status: ready -->
<sect1 xml:id="language.operators.precedence">
<title>La priorité des opérateurs</title>
<titleabbrev>Priorité des opérateurs</titleabbrev>
Expand Down Expand Up @@ -263,6 +263,13 @@
<link linkend="control-structures.yield.from">yield from</link>
</entry>
</row>
<row>
<entry>(n/a)</entry>
<entry><literal>=&gt;</literal></entry>
<entry>
<link linkend="language.generators.syntax">yield avec clés</link>
</entry>
</row>
<row>
<entry>(n/a)</entry>
<entry><literal>yield</literal></entry>
Expand Down Expand Up @@ -296,6 +303,26 @@
<link linkend="language.operators.logical">logique</link>
</entry>
</row>
<row>
<entry>(n/a)</entry>
<entry>
<literal>include</literal>
<literal>include_once</literal>
<literal>require</literal>
<literal>require_once</literal>
</entry>
<entry>
<function>include</function>,
<function>include_once</function>,
<function>require</function>&listendand;
<function>require_once</function>
</entry>
</row>
<row>
<entry>(n/a)</entry>
<entry><literal>fn (...) =&gt;</literal></entry>
<entry><link linkend="functions.arrow">désambiguïsation de la flèche fn</link></entry>
</row>
<row>
<entry>(n/a)</entry>
<entry><literal>throw</literal></entry>
Expand Down
6 changes: 5 additions & 1 deletion language/predefined/attributes/attribute.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5e36b489fc67bd0b5c424c7d1cd131c2e982bc5c Maintainer: pierrick Status: ready -->
<!-- EN-Revision: 4fc9f9ea7ba36a383613ede343a0820f5cc46aa2 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.attribute" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>La classe Attribute</title>
Expand Down Expand Up @@ -185,6 +185,10 @@
<entry>8.5.0</entry>
<entry>
Ajout de <constant>Attribute::TARGET_CONSTANT</constant>.
L'application de <code>#[\Attribute]</code> à une classe abstraite, un
enum, une interface ou un trait déclenche désormais une erreur à la
compilation (auparavant, elle n'était signalée qu'à l'exécution lors de
l'appel à <methodname>ReflectionAttribute::newInstance</methodname>).
</entry>
</row>
</tbody>
Expand Down
Loading
Loading