Les programmes très proches de déborder la pile d'appels peuvent maintenant Error lorsqu'ils utilisent plus de zend.max_allowed_stack_size-zend.reserved_stack_size octets de pile (fiber.stack_size-zend.reserved_stack_size pour les fibres).
Exécuter proc_get_status() plusieurs fois retournera désormais
toujours la bonne valeur sur les systèmes POSIX. Précédemment, seul le premier appel
de la fonction retournait la bonne valeur. Exécuter
proc_close() après proc_get_status()
retournera également le bon code de sortie. Précédemment, cela retournait
-1
.
En interne, cela fonctionne en mettant en cache le résultat sur les systèmes POSIX.
Si le comportement précédent est requis, il est possible de vérifier la clé
"cached"
dans le tableau retourné par
proc_get_status() pour vérifier si le résultat a été mis en cache.
Les minuteries d'exécution maximales de Zend sont maintenant activées par défault pour les versions ZTS sur Linux.
L'utilisation des traits avec des propriétés statiques redéclarera désormais les propriétés statiques héritées de la classe parente. Cela créera un stockage de propriétés statiques séparé pour la classe actuelle. Cela est analogue à l'ajout de la propriété statique à la classe directement sans les traits.
Assigner un index négatif $n à un tableau vide fera en sorte que
le prochain index soit $n+1
au lieu de 0
.
La variance de la visibilité des constantes de classe est maintenant correctement vérifiée lorsqu'elle est héritée des interfaces.
Les entrées WeakMap dont la clé est mappée sur elle-même (éventuellement de manière transitive) peuvent maintenant être supprimées lors de la collecte des cycles si la clé n'est pas atteignable sauf en itérant sur le WeakMap (l'atteignabilité via l'itération est onsidérée comme faible). Auparavant, de telles entrées ne seraient jamais automatiquement supprimées.
L'extension DateTime a introduit des exceptions et erreurs spécifiques aux dates sous les hiérarchies DateError et DateException, au lieu de warnings et exceptions génériques. Cela améliore la gestion des erreurs, au détriment de devoir vérifier les erreurs et exceptions.
Appeler DOMChildNode::after(), DOMChildNode::before(), DOMChildNode::replaceWith() sur un nœud qui n'a pas de parent est maintenant une opération nulle au lieu de lever une exception d'hiérarchie, ce qui est le comportement exigé par la spécification DOM.
Utiliser les méthodes DOMParentNode
et DOMChildNode sans document fonctionne
maintenant au lieu de lancer une DOMException
DOM_HIERARCHY_REQUEST_ERR
.
Cela est conforme au comportement exigé par la spécification DOM.
Appeler DOMDocument::createAttributeNS() sans spécifier de préfixe créerait incorrectement un namespace par défaut, plaçant l'élément à l'intérieur du namespace au lieu de l'attribut. Ce bogue est maintenant corrigé.
DOMDocument::createAttributeNS() lancerait précédemment
incorrectement une DOMException
DOM_NAMESPACE_ERRNAMESPACE_ERR
lorsque le préfixe était déjà utilisé pour un
URI différent. Il choisit maintenant correctement un préfixe différent lorsqu'il y a un
conflit de nom de préfixe.
De nouvelles méthodes et propriétés ont été ajoutées à certaines classes DOM. Si une classe utilisateur hérite de ces classes et déclare une méthode ou une propriété avec le même nom, les déclarations doivent être compatibles. Sinon, une erreur de compilation typique sur des déclarations incompatibles sera lancée. Voir la liste des nouvelles fonctionnalités et nouvelles fonctions pour une liste des méthodes et propriétés nouvellement implémentées.
Les fonctions C qui ont un type de retour de void retournent maintenant
null
au lieu de retourner l'objet suivant object(FFI\CData:void) { }
.
La directive INI opcache.consistency_checks a été supprimée. Cette fonctionnalité était cassée avec le tracing JIT, ainsi qu'avec le cache d'héritage, et a été désactivée sans moyen de l'activer depuis PHP 8.1.18 et PHP 8.2.5. Le tracing JIT et le cache d'héritage peuvent modifier la shm après que le script ait été persisté en invalidant sa somme de contrôle. La tentative de correction a sauté les pointeurs modifiables mais a été rejetée en raison de la complexité. Pour cette raison, il a été décidé de supprimer la fonctionnalité.
Les types des constantes de la classe Phar sont maintenant déclarés.
La fonction range() a subi divers changements :
0
pour $step
.$step
négatif pour les plages croissantes.$step
est un flottant qui peut être interprété
comme un entier, c'est maintenant fait.E_WARNING
est émis si
$start
ou $end
est une chaîne
vide. La valeur continue d'être convertie en la valeur 0
.E_WARNING
est maintenant émis si
$start
ou $end
a plus d'un
octet, seulement si c'est une chaîne non numérique.E_WARNING
est maintenant émis si
$start
ou $end
est converti en un
entier car l'autre entrée de limite est un nombre.
(par exemple : range(5, 'z');
).E_WARNING
est maintenant émis si
$step
est un flottant lors de la génération d'une plage de
caractères, sauf si les deux entrées de limites sont des chaînes numériques (par exemple :
range('5', '9', 0.5);
ne produit pas de warning).range('9', 'A');
).<?php
range('9', 'A'); // ["9", ":", ";", "<", "=", ">", "?", "@", "A"], à partir de PHP 8.3.0
range('9', 'A'); // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], avant PHP 8.3.0
?>
number_format() gère maintenant les valeurs négatives de
$decimals
en arrondissant
$num
à abs($decimals)
chiffres avant le
séparateur décimal. Précédemment, les valeurs négatives de $decimals
étaient ignorées.
Le drapeau d'erreur de file() vérifie maintenant toutes les drapeaux invalides.
Notamment FILE_APPEND
était précédemment accepté silencieusement.
Les types des constantes de la classe SNMP sont maintenant déclarés.