diff --git a/appendices/filters.xml b/appendices/filters.xml index 2617fb0a26..19454b5a11 100644 --- a/appendices/filters.xml +++ b/appendices/filters.xml @@ -1,6 +1,5 @@ - - + Liste des filtres disponibles @@ -286,7 +285,7 @@ fclose($fp);
zlib.deflate et zlib.inflate - + zlib.deflate (compression) et zlib.inflate (décompression) sont les implémentations des méthodes de compression présentées dans la @@ -306,12 +305,119 @@ fclose($fp); occupent le moins d'espace en mémoire. Par défaut, window vaut actuellement 15. + Le filtre zlib.deflate implémente les méthodes de + compression DEFLATE, ZLIB et + GZIP selon la valeur du paramètre + window. + + 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. + + + + + DEFLATE (RFC 1951) + 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 + zlib.deflate. + Les fonctions qui opèrent directement sur des chaînes sont + gzdeflate et gzinflate. + + + + + + ZLIB (RFC 1950) + applique l'algorithme DEFLATE 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 : + + + 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 + gzcompress et gzuncompress. + + + + + + GZIP (RFC 1952) + applique l'algorithme DEFLATE en ajoutant un en-tête et + un trailer contenant la somme de contrôle CRC32 des + données non compressées et leur longueur, tous deux en ordre little-endian : + + + C'est le format des fichiers .gz. + 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 LONGUEUR. + Les fonctions qui opèrent directement sur des chaînes sont + gzencode et gzdecode ; + la fonction gzopen permet de lire et d'écrire des + fichiers .gz. + + + + + Avec le filtre zlib.inflate, seul le paramètre + window est pris en compte ; tout autre paramètre + (memory, level) 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. + + + + + DEFLATE (RFC 1951) : + utiliser window=-$W, avec $W au moins égal à la valeur utilisée à la + compression. En cas de doute, utiliser window=-15. + + + + + + ZLIB (RFC 1950) : + utiliser window=$W. La valeur de $W est disponible dans l'en-tête ZLIB, + sinon utiliser window=15. + + + + + + GZIP (RFC 1952) : + 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. + + + + + + ZLIB ou GZIP : + 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. + + + + memory 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. - + diff --git a/language/oop5/changelog.xml b/language/oop5/changelog.xml index be86a7ba71..d636344eae 100644 --- a/language/oop5/changelog.xml +++ b/language/oop5/changelog.xml @@ -1,5 +1,5 @@ - + Modifications en POO (Programmation orientée objet) @@ -16,6 +16,23 @@ + + 8.5.0 + + Changement : Une méthode retournant static peut désormais + être redéfinie dans une classe final pour déclarer + self ou le type propre de la classe comme type de retour, + ces derniers étant équivalents à static dans une classe ne + pouvant pas être étendue davantage. + + + + 8.5.0 + + Changement : Les traits sont + désormais liés à une classe avant sa classe parente. + + 8.4.0 diff --git a/language/oop5/cloning.xml b/language/oop5/cloning.xml index 31aa590fb5..fefdb13535 100644 --- a/language/oop5/cloning.xml +++ b/language/oop5/cloning.xml @@ -1,5 +1,5 @@ - + Clonage d'objets @@ -157,6 +157,61 @@ echo (clone $dateTime)->format('Y'); ]]> + + + Clonage avec remplacement de propriétés + + + À partir de PHP 8.5.0, clone est également disponible + en tant que fonction, dont le second paramètre + withProperties 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. + + + + Les remplacements sont appliqués après l'exécution de + __clone(), et ils respectent la + visibilité de toutes les propriétés. + Les propriétés readonly + 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. + + + + Clonage d'un objet avec remplacement de propriétés + + $x]); + } +} + +$p = new Point(1, 2); +$q = $p->withX(10); + +echo $q->x, ' ', $q->y; +?> +]]> + + &example.outputs; + + + + + + + Traits @@ -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. + + + À 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 + le guide de + migration pour plus de détails. + + Exemple avec l'ordre de précédence diff --git a/language/oop5/variance.xml b/language/oop5/variance.xml index cf33810892..cf59aebae1 100644 --- a/language/oop5/variance.xml +++ b/language/oop5/variance.xml @@ -1,5 +1,5 @@ - + Covariance et Contravariance @@ -136,6 +136,18 @@ Mavrick barks ]]> + + + À partir de PHP 8.5.0, lorsqu'une méthode parente déclare static + comme type de retour, une méthode de substitution dans une classe + final peut déclarer self ou le type propre + de la classe comme type de retour à la place, puisque ces types sont + équivalents à static dans une classe qui ne peut pas être + étendue davantage. Consultez + le + guide de migration pour plus de détails. + + diff --git a/language/operators/comparison.xml b/language/operators/comparison.xml index 35fec34f78..182a448791 100644 --- a/language/operators/comparison.xml +++ b/language/operators/comparison.xml @@ -1,5 +1,5 @@ - + Opérateurs de comparaison Comparaison @@ -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é. + + + À partir de PHP 8.5.0, la comparaison lâche d'un object non + comparable (comme un enum, CurlHandle ou une autre + classe interne) avec un bool via == ou + != est évaluée de manière cohérente comme si l'objet + était converti en bool, c'est-à-dire + (bool) $object. 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 + ($object == true) ; la comparaison avec une valeur + booléenne dans une variable retournait toujours &false;. Consultez + le + guide de migration pour plus de détails. + + diff --git a/language/operators/precedence.xml b/language/operators/precedence.xml index fafbcdfab5..08fbaa2d40 100644 --- a/language/operators/precedence.xml +++ b/language/operators/precedence.xml @@ -1,5 +1,5 @@ - + La priorité des opérateurs Priorité des opérateurs @@ -263,6 +263,13 @@ yield from + + (n/a) + => + + yield avec clés + + (n/a) yield @@ -296,6 +303,26 @@ logique + + (n/a) + + include + include_once + require + require_once + + + include, + include_once, + require&listendand; + require_once + + + + (n/a) + fn (...) => + désambiguïsation de la flèche fn + (n/a) throw diff --git a/language/predefined/attributes/attribute.xml b/language/predefined/attributes/attribute.xml index 745c9c0466..ada3853082 100644 --- a/language/predefined/attributes/attribute.xml +++ b/language/predefined/attributes/attribute.xml @@ -1,5 +1,5 @@ - + La classe Attribute @@ -185,6 +185,10 @@ 8.5.0 Ajout de Attribute::TARGET_CONSTANT. + L'application de #[\Attribute] à 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 à ReflectionAttribute::newInstance). diff --git a/language/predefined/attributes/deprecated.xml b/language/predefined/attributes/deprecated.xml index 48ff02bc51..50bbef086b 100644 --- a/language/predefined/attributes/deprecated.xml +++ b/language/predefined/attributes/deprecated.xml @@ -1,6 +1,5 @@ - - + L'attribut Deprecated Deprecated @@ -13,6 +12,10 @@ Cet attribut est utilisé pour marquer une fonctionnalité comme obsolète. L'utilisation d'une fonctionnalité obsolète entraînera l'émission d'une erreur E_USER_DEPRECATED. + + À partir de PHP 8.5.0, cet attribut peut également être appliqué aux + traits et aux constantes de compilation déclarées en dehors d'une classe. +
@@ -104,6 +107,31 @@ This is unsafe
+
+ &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Deprecated peut désormais être appliqué aux + traits et aux constantes de compilation déclarées en dehors d'une + classe, ces dernières via la nouvelle cible + Attribute::TARGET_CONSTANT. + + + + + +
+
&reftitle.seealso; diff --git a/language/predefined/serializable.xml b/language/predefined/serializable.xml index a3e55b4710..f3b9e851dd 100644 --- a/language/predefined/serializable.xml +++ b/language/predefined/serializable.xml @@ -1,6 +1,5 @@ - - + L'interface Serializable @@ -38,6 +37,35 @@ une notice de dépréciation. + + + Le nouveau code devrait utiliser les méthodes magiques + __serialize() et + __unserialize(), + disponibles à partir de PHP 7.4.0. + Lorsqu'une classe les déclare en plus de cette interface, + serialize utilise toujours + __serialize() et n'atteint jamais + Serializable::serialize. + La désérialisation est déterminée par le format des données : un flux + écrit par PHP 7.4.0 ou ultérieur est lu par + __unserialize(), un flux écrit + avant l'est toujours par + Serializable::unserialize. + Implémenter Serializable reste donc utile + pour lire d'anciens flux, et pour satisfaire une déclaration de type + Serializable ; déclarer les quatre méthodes + couvre tous les cas et évite la notice de dépréciation. + + + + + Les méthodes magiques n'ont pas d'interface propre : une classe qui les + déclare sans implémenter Serializable + n'en est pas une instance. + method_exists est le moyen de les détecter. + +
@@ -57,45 +85,61 @@
&reftitle.examples; - Exemple simple + Prise en charge de PHP 7.1.0 à 7.3.0 + + Les méthodes magiques portent la forme sérialisée, et les méthodes de + l'interface leur délèguent, de sorte qu'une seule représentation convient + dans les deux cas. + data = "Mes données privées"; - } - public function serialize() { - return serialize($this->data); - } - public function unserialize($data) { - $this->data = unserialize($data); +class Task implements Serializable +{ + private $label; + + public function __construct($label) + { + $this->label = $label; } - public function getData() { - return $this->data; + + public function __serialize(): array + { + return ['label' => $this->label]; } -} -$obj = new obj; -$ser = serialize($obj); + public function __unserialize(array $data): void + { + $this->label = $data['label']; + } -var_dump($ser); + // Jamais appelé à partir de PHP 7.4.0 + public function serialize() + { + return serialize($this->__serialize()); + } -$newobj = unserialize($ser); + // Toujours appelé à partir de PHP 7.4.0, pour les données écrites avant + public function unserialize($data) + { + $this->__unserialize(unserialize($data)); + } +} -var_dump($newobj->getData()); +var_dump(serialize(new Task('deploy'))); ?> ]]> - &example.outputs.similar; + &example.outputs; + + Avant PHP 7.4.0, le même code sérialise via l'interface et affiche + string(47) "C:4:"Task":31:{a:1:{s:5:"label";s:6:"deploy";}}". +
diff --git a/language/types/integer.xml b/language/types/integer.xml index a73996884f..7c9fa4748c 100644 --- a/language/types/integer.xml +++ b/language/types/integer.xml @@ -1,5 +1,5 @@ - + @@ -215,20 +215,25 @@ var_dump(intval(8.1)); // 8 dans les deux cas ]]> - + Si le nombre à virgule flottante est au-delà des limites des &integer;s (habituellement, +/- 2.15e+9 = 2^31 sur les plate-formes 32-bit et +/- 9.22e+18 = 2^63 sur les plate-formes 64-bit), le résultat sera indéfini, sachant que le &float; n'a pas une précision suffisante pour donner un résultat &integer; exact. - Aucune alerte n'est émise lorsque ce comportement survient ! - + À partir de PHP 8.5.0, un E_WARNING est émis lorsqu'un + float non représentable en int est converti. Avant + PHP 8.5.0, aucun diagnostic n'était émis. + - + NaN, Inf et -Inf sont toujours égaux à zéro lors d'une conversion en int. - + À partir de PHP 8.5.0, leur conversion en int émet un + E_WARNING, comme la conversion de + NAN vers tout autre type. + diff --git a/reference/array/functions/list.xml b/reference/array/functions/list.xml index 513de17995..d5102e420b 100644 --- a/reference/array/functions/list.xml +++ b/reference/array/functions/list.xml @@ -1,5 +1,5 @@ - + @@ -91,6 +91,13 @@ + + 8.5.0 + + La déstructuration d'une valeur non-tableau (autre que &null;) émet + désormais un E_WARNING. + + 7.3.0 diff --git a/reference/funchand/functions/register-tick-function.xml b/reference/funchand/functions/register-tick-function.xml index cbc0c3f79b..0e6411d8c4 100644 --- a/reference/funchand/functions/register-tick-function.xml +++ b/reference/funchand/functions/register-tick-function.xml @@ -1,7 +1,6 @@ - - + register_tick_function @@ -54,6 +53,36 @@ + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Les gestionnaires de tick sont désormais désactivés plus tard lors de + l'arrêt de la requête : après l'exécution de toutes les fonctions + d'arrêt et des destructeurs, et après le nettoyage des gestionnaires de + sortie. Auparavant, ils étaient désactivés au tout début de l'arrêt de + la requête, de sorte que les fonctions tick n'étaient plus appelées + pendant les fonctions d'arrêt, les destructeurs ou la gestion de la + sortie. Consultez + le guide de + migration pour plus de détails. + + + + + + + &reftitle.examples; diff --git a/reference/intl/locale/parse-locale.xml b/reference/intl/locale/parse-locale.xml index 2a57ad20f1..7d5dea038a 100755 --- a/reference/intl/locale/parse-locale.xml +++ b/reference/intl/locale/parse-locale.xml @@ -1,6 +1,5 @@ - - + @@ -38,11 +37,13 @@ locale - + La locale dont il faut extraire le tableau. Il est à noter que 'variant' et - 'private' peuvent prendre jusqu'à 15 valeurs au maximum, alors que - 'extlang' peut prendre jusqu'à 3 valeurs. - + 'private' peuvent prendre jusqu'à 15 valeurs au maximum, alors que + 'extlang' peut prendre jusqu'à 3 valeurs. Si une chaîne vide est passée, + la valeur retournée par locale_get_default est + utilisée à la place. + @@ -51,18 +52,15 @@ &reftitle.returnvalues; - + Retourne un tableau contenant la liste des paires clé-valeur, où les clés sont les noms des éléments, et les valeurs sont leur valeur associée. Le tableau est ordonné de la même manière que les éléments dans la locale, - p. ex. si les variantes sont '-varX-varY-varZ' alors le tableau retourné - contiendra variant0=>varX , variant1=>varY , - variant2=>varZ, etc. - - - Retourne &null; quand la taille de locale dépasse - INTL_MAX_LOCALE_LEN. - + par exemple si les variantes sont -varX-varY-varZ alors le tableau retourné + contiendra variant0=>varX, + variant1=>varY, variant2=>varZ. + + &intl.locale-len.return; @@ -101,6 +99,28 @@ if ($arr) { + + + Une chaîne vide utilise la locale par défaut + + $value) { + echo "$key : $value , "; + } +} +?> +]]> + + + &example.outputs; + + @@ -110,6 +130,8 @@ language : sl , script : Latn , region : IT , variant0 : NEDIS , locale_compose + locale_get_default + locale_set_default diff --git a/reference/mbstring/functions/mb-strpos.xml b/reference/mbstring/functions/mb-strpos.xml index f530e890cb..33f7e8ef15 100644 --- a/reference/mbstring/functions/mb-strpos.xml +++ b/reference/mbstring/functions/mb-strpos.xml @@ -1,6 +1,5 @@ - - + mb_strpos @@ -56,10 +55,10 @@ offset - - La position de début de recherche. S'il est omis, zéro sera utilisé. + + La position de début de recherche en caractères. S'il est omis, zéro sera utilisé. Une position négative compte à partir de la fin de la &string;. - + @@ -74,12 +73,12 @@ &reftitle.returnvalues; - - Retourne la position numérique de - la première occurrence du caractère needle dans la - chaîne haystack. Si needle est - introuvable, mb_strpos retourne &false;. - + + Retourne la position en caractères (non en octets) de la première occurrence + de needle dans la chaîne haystack, + en comptant à partir de 0. + Retourne &false; si needle est introuvable. + @@ -119,10 +118,37 @@ + + &reftitle.examples; + + <function>mb_strpos</function> retourne un décalage en caractères, pas en octets + + +]]> + + &example.outputs; + + + + + + &reftitle.seealso; + mb_strrpos + mb_stripos mb_internal_encoding strpos diff --git a/reference/misc/functions/hrtime.xml b/reference/misc/functions/hrtime.xml index ce8f7fb079..e49cb7112b 100644 --- a/reference/misc/functions/hrtime.xml +++ b/reference/misc/functions/hrtime.xml @@ -1,6 +1,5 @@ - - + hrtime @@ -47,6 +46,30 @@ + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Sur macOS, l'implémentation utilise désormais + clock_gettime_nsec_np(CLOCK_UPTIME_RAW) à la place de + mach_absolute_time(). + + + + + + + &reftitle.examples; @@ -80,6 +103,7 @@ Array L'extension de Gestion du temps à haute résolution microtime + time_nanosleep diff --git a/reference/spl/arrayiterator/construct.xml b/reference/spl/arrayiterator/construct.xml index 5bf2ce42f1..4823c36102 100644 --- a/reference/spl/arrayiterator/construct.xml +++ b/reference/spl/arrayiterator/construct.xml @@ -1,7 +1,5 @@ - - - + ArrayIterator::__construct @@ -18,9 +16,6 @@ Construit un &object; ArrayIterator. - - &warn.undocumented.func; - @@ -30,9 +25,10 @@ array - + Le tableau ou l'objet à itérer. - + Passer un object est déprécié à partir de PHP 8.5.0. + @@ -50,13 +46,51 @@ + + &reftitle.errors; + + À partir de PHP 8.5.0, lève une + InvalidArgumentException si + array est un enum. + + + + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Passer un enum comme array lève désormais une + InvalidArgumentException. + + + + 8.5.0 + + Passer un object comme array est déprécié. + + + + + + + &reftitle.seealso; - - - ArrayIterator::getArrayCopy - - + + ArrayIterator::getArrayCopy + ArrayIterator::setFlags + ArrayObject::__construct + diff --git a/reference/spl/arrayobject/construct.xml b/reference/spl/arrayobject/construct.xml index 471f191973..93b9d89737 100644 --- a/reference/spl/arrayobject/construct.xml +++ b/reference/spl/arrayobject/construct.xml @@ -1,12 +1,11 @@ - - + ArrayObject::__construct Construit un nouvel objet tableau - + &reftitle.description; @@ -18,8 +17,17 @@ Construit un nouvel objet tableau. + + + À partir de PHP 8.5.0, passer un enum comme paramètre + array lève une + InvalidArgumentException. + Modifier les propriétés $name ou + $value d'un enum romprait les hypothèses du moteur. + + - + &reftitle.parameters; @@ -27,17 +35,18 @@ array - + Le paramètre array accepte - un &array; ou un autre &object;. - + un array ou un object. + Passer un object est déprécié à partir de PHP 8.5.0. + flags - Option de contrôle du comportement de + Option de contrôle du comportement de l'objet ArrayObject. Voir la méthode ArrayObject::setFlags. @@ -56,7 +65,45 @@ - + + + &reftitle.errors; + + À partir de PHP 8.5.0, lève une + InvalidArgumentException si + array est un enum. + + + + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Passer un enum comme array lève désormais une + InvalidArgumentException. + + + + 8.5.0 + + Passer un object comme array est déprécié. + + + + + + + &reftitle.examples; @@ -99,16 +146,17 @@ object(ArrayObject)#1 (1) { - + &reftitle.seealso; ArrayObject::setflags + ArrayIterator::__construct - + - + strpos @@ -37,9 +36,15 @@ needle - + La chaîne à rechercher. - + + + Passer une chaîne vide comme needle correspond à + chaque position. strpos retourne + offset s'il est spécifié, ou + 0 sinon. + &strings.parameter.needle.non-string;