Les noms de fermeture ont été ajustés pour inclure le nom de la fonction parente et la ligne de définition pour les rendre plus faciles à distinguer, par exemple dans les traces de pile.
Les commutations de fibres pendant l'exécution du destructeur sont désormais autorisées. Cela était précédemment bloqué en raison de conflits avec le ramasse-miettes.
Les destructeurs peuvent dĂ©sormais ĂȘtre exĂ©cutĂ©s dans une fibre sĂ©parĂ©e :
Lorsque le ramasse-miettes est dĂ©clenchĂ© dans une fibre, les destructeurs appelĂ©s par le ramasse-miettes sont exĂ©cutĂ©s dans une fibre sĂ©parĂ©e : la gc_destructor_fiber. Si cette fibre est suspendue, une nouvelle est créée pour exĂ©cuter les destructeurs restants. Le gc_destructor_fiber prĂ©cĂ©dent n'est plus rĂ©fĂ©rencĂ© par le ramasse-miettes et peut ĂȘtre collectĂ© s'il n'est plus rĂ©fĂ©rencĂ© ailleurs. Les objets dont le destructeur est suspendu ne seront pas collectĂ©s tant que le destructeur ne retourne pas ou que la Fiber n'est pas collectĂ©e.
Les drapeaux d'état des gestionnaires de sortie passés au paramÚtre flags
de ob_start() sont maintenant effacés.
output_add_rewrite_var() utilise désormais
url_rewriter.hosts
Ă la place de
session.trans_sid_hosts
pour la sélection des hÎtes qui seront réécrits.
Le support pour l'EOL Apache 2.0 et 2.2 a été supprimé. La version minimale d'Apache requise est désormais 2.4.
Le serveur intĂ©grĂ© recherche un fichier d'index de maniĂšre rĂ©cursive en parcourant les rĂ©pertoires parents si le fichier spĂ©cifiĂ© ne peut pas ĂȘtre localisĂ©. Ce processus Ă©tait prĂ©cĂ©demment ignorĂ© si le chemin semblait faire rĂ©fĂ©rence Ă un fichier, c'est-Ă -dire si le dernier composant du chemin contenait un point. Dans ce cas, une erreur 404 Ă©tait renvoyĂ©e. Le comportement a Ă©tĂ© modifiĂ© pour rechercher un fichier d'index dans tous les cas.
La vidange des en-tĂȘtes sans corps rĂ©ussira dĂ©sormais.
La page d'état dispose d'un nouveau champ pour afficher un pic de mémoire.
La configuration /dev/poll de events.mechanism
pour Solaris/Illumos a été retirée.
trigger_error() et user_error() ont désormais un type de retour de true au lieu de bool.
DOMDocument::registerNodeClass()
a désormais un type de retour de true au lieu de
bool.
Il ne pouvait retourner que true en pratique.
hash_update()
a désormais un type de retour de true au lieu de
bool.
Il ne pouvait retourner que true en pratique.
NumberFormatter::ROUND_TOWARD_ZERO et
NumberFormatter::ROUND_AWAY_FROM_ZERO
ont été ajoutés en tant qu'alias pour
NumberFormatter::ROUND_DOWN et
NumberFormatter::ROUND_UP
pour ĂȘtre cohĂ©rent avec les nouveaux modes
PHP_ROUND_*.
ResourceBundle::get()
a désormais un type de retour provisoire de ResourceBundle|array|string|int|null.
Les fonctions idn_to_ascii() et idn_to_utf8()
lancent désormais toujours des exceptions ValueError
si le nom de domain est vide ou trop long.
Les fonctions idn_to_ascii() et idn_to_utf8()
lancent désormais toujours des exceptions ValueError
si le paramĂštre variant n'est pas
INTL_IDNA_VARIANT_UTS46.
libxml_set_streams_context() lance désormais immédiatement une TypeError lorsqu'une ressource non contextuelle de flux est passée à la fonction, au lieu de lancer plus tard lorsque le contexte de flux est utilisé.
Le comportement de mb_strcut() est désormais plus cohérent sur les chaßnes UTF-8 et UTF-16 invalides. Il n'y a pas de changement de comportement pour les chaßnes UTF-8 et UTF-16 valides.
Le row de
odbc_fetch_object(),
odbc_fetch_array(), de
odbc_fetch_into() a désormais une valeur par défaut de null,
restant cohérent avec odbc_fetch_row().
Auparavant, les valeurs par défaut étaient
-1,
-1,
et 0,
respectivement.
L'extra_attributes dans
openssl_csr_new() définit les attributs du
CSR au lieu du DN du sujet, ce qui était incorrectement fait précédemment.
Le dn dans
openssl_csr_new() permet de définir un array
de valeurs pour une seule entrée.
Un nouveau serial_hex a Ă©tĂ© ajoutĂ© Ă
openssl_csr_sign() pour permettre de définir des numéros de série
au format hexadécimal.
Analyser un ASN.1 UTCTime avec openssl_x509_parse()
échoue si les secondes sont omises pour les versions d'OpenSSL inférieures à 3.2
(-1 est retourné pour de tels champs).
Les versions d'OpenSSL supérieures à 3.3 ne chargeaient déjà pas de tels certificats.
Il est désormais possible de récupérer la valeur de l'attribut
PDO::ATTR_STRINGIFY_FETCHES avec
PDO::getAttribute().
Une nouvelle constante PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
a Ă©tĂ© ajoutĂ©e pour rĂ©cupĂ©rer l'utilisation de la mĂ©moire des rĂ©sultats de requĂȘte avec
PDO::getAttribute() pour les pilotes qui le prennent en charge.
Il est désormais possible de récupérer la valeur des attributs
FB_ATTR_DATE_FORMAT,
FB_ATTR_TIME_FORMAT,
FB_ATTR_TIMESTAMP_FORMAT,
avec
PDO::getAttribute().
Ajout de nouveaux attributs pour spécifier le niveau d'isolation de transaction et le mode d'accÚs. Cinq constantes liées à cette fonctionnalité ont été ajoutées :
Pdo\Firebird::TRANSACTION_ISOLATION_LEVELPdo\Firebird::READ_COMMITTEDPdo\Firebird::REPEATABLE_READPdo\Firebird::SERIALIZABLEPdo\Firebird::WRITABLE_TRANSACTIONLors de l'utilisation de connexions persistantes, il y a maintenant une vérification de vivacité dans le constructeur.
Le contenu qui est construit change en fonction de la valeur de
FB_API_VER dans
ibase.h.
Une nouvelle méthode statique Pdo\Firebird::getApiVersion()
peut ĂȘtre utilisĂ©e pour obtenir cette information.
Cette information est également maintenant référencée dans phpinfo().
Cinq nouveaux types de données sont désormais disponibles :
INT128, DEC16, DEC34, TIMESTAMP_TZ, TIME_TZ
.
Ceux-ci sont disponibles Ă partir de Firebird 4.0.
Il est désormais possible de récupérer la valeur de l'attribut
PDO::ATTR_FETCH_TABLE_NAMES avec
PDO::getAttribute().
Support de la rĂ©cupĂ©ration de l'utilisation de la mĂ©moire des requĂȘtes pour
PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE.
Si la colonne est de type FLOAT4OID ou
FLOAT8OID la valeur sera maintenant retournée en tant que
float au lieu d'une string.
Le paramĂštre conditions de
pg_select() est désormais facultatif et accepte un tableau vide.
Les méthodes Phar::setAlias(), Phar::setDefaultStub() peuvent désormais avoir un type de retour provisoire de true au lieu de bool.
posix_isatty() définit désormais le numéro d'erreur lorsque l'argument de descripteur de fichier/flux est invalide.
ReflectionGenerator::getFunction() peut maintenant ĂȘtre appelĂ© aprĂšs que le gĂ©nĂ©rateur ait fini d'exĂ©cuter.
Le paramĂštre backlog de
socket_create_listen() a désormais une valeur par défaut de
SOMAXCONN.
Auparavant, c'était 128.
Les fonctions sodium_crypto_aead_aes256gcm_* sont désormais disponibles sur les processeurs aarch64 avec les extensions cryptographiques ARM.
Les méthodes SplPriorityQueue::insert(), SplPriorityQueue::recoverFromCorruption(), SplHeap::insert(), SplHeap::recoverFromCorruption() peuvent désormais avoir un type de retour provisoire de true à la place de bool.
SplObjectStorage implémente désormais SeekableIterator.
La valeur par défaut du 'cost' pour l'algorithme de hachage PASSWORD_BCRYPT
utilisé par la fonction password_hash() a été augmentée de
10 Ă 12.
debug_zval_dump() indique désormais si un tableau est compacté.
long2ip() a désormais un type de retour de string
Ă la place de string|false.
highlight_string() a désormais un type de retour de
string|true Ă la place de string|bool.
print_r() a désormais un type de retour de
string|true Ă la place de string|bool.
Le paramÚtre mode de la fonction round() a été étendu pour accepter
RoundingMode|int,
acceptant des instances d'un nouvel énumérateur RoundingMode.
Quatre nouveaux modes ont été ajoutés à la fonction round() : RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero
L'implĂ©mentation interne de l'arrondi aux entiers a Ă©tĂ© réécrite pour ĂȘtre plus facile Ă vĂ©rifier
pour la correction et plus facile Ă maintenir.
Quelques bugs d'arrondi ont été corrigés à la suite de la réécriture.
Par exemple, auparavant, l'arrondi de 0.49999999999999994 Ă l'entier le plus proche
aurait donné 1.0 au lieu du résultat correct 0.0.
Des entrĂ©es supplĂ©mentaires pourraient Ă©galement ĂȘtre affectĂ©es et donner des rĂ©sultats diffĂ©rents
par rapport aux versions PHP précédentes.
Correction d'un bug causé par l'arrondi "pré-arrondi" de la fonction round().
Auparavant, en utilisant "pré-arrondi" pour traiter une valeur comme 0.285
(en fait 0.28499999999999998) comme un nombre décimal et l'arrondir à 0.29.
Cependant, "pré-arrondi" arrondit incorrectement certains nombres,
donc cette correction supprime "pré-arrondi" et change la façon dont les nombres sont comparés,
donc les valeurs sont correctement arrondies en tant que nombres décimaux.
Le nombre maximum de chiffres significatifs que round() peut gérer a été étendu
d'un chiffre.
Par exemple, round(4503599627370495.5) retournait
4503599627370495.5,
mais retourne maintenant 4503599627370496.
Le minimum de la version de libcurl requise est désormais 7.61.0.
L'option CURLOPT_DNS_USE_GLOBAL_CACHE n'a plus
aucun effet et est silencieusement ignorée.
Cette fonctionnalité sous-jacente a été dépréciée dans libcurl 7.11.1,
et supprimée dans libcurl 7.62.0.
Changer de type d'un objet GMP en bool est désormais
possible au lieu de générer une E_RECOVERABLE_ERROR.
Le comportement de conversion est surchargé de sorte qu'un objet GMP
représentant la valeur 0 est converti en false.
Le minimum de la version de libxml2 requise est désormais 2.9.4.
Le comportement de la classe Intl a été normalisé pour toujours lancer des exceptions Error lors de la tentative d'utilisation d'un objet non initialisé, ou lorsque le clonage échoue.
Les tables de données Unicode ont été mises à jour en Unicode 16.0.
Le support pour le nouveau type de données VECTOR de MySQL 9 a été ajouté.
Le minimum de la version d'OpenSSL requise est désormais 1.1.1.
Le minimum de la version de libpq requise est désormais 10.0.
Le minimum de la version de libpq requise est désormais 10.0.
Les accÚs hors limites dans SplFixedArray lancent désormais des exceptions de type OutOfBoundsException au lieu de RuntimeException. Car OutOfBoundsException est une classe enfant de RuntimeException, aucun changement de comportement n'est observé lors de la tentative de capture de ces exceptions.
Les propriétés typées XSLTProcessor::$cloneDocument et XSLTProcessor::$doXInclude sont désormais déclarées.
Le minimum de la version de zlib requise est désormais 1.2.11.
Augmentation de la performance de l'analyse et de la génération de nombres à virgule flottante dans les constructions ZTS sous des charges trÚs concurrentes. Cela affecte les fonctions printf() ainsi que les fonctions de sérialisation telles que json_encode() ou serialize().
sprintf() utilisant uniquement %s et
l'interpolation de chaßne %d sera compilé en l'interpolation
de chaßne équivalente, évitant le surcoût d'un appel de fonction et
l'analyse répétée de la chaßne de format.
Augmentation de la performance des conversions de nombres et des opérations.
La performance de DOMNode::C14N() est grandement amĂ©liorĂ©e pour le cas sans requĂȘte xpath. Cela peut donner une amĂ©lioration de temps de facilement deux ordres de grandeur pour les documents avec des dizaines de milliers de nĆuds.
Augmentation de la performance et réduction de la consommation de mémoire de la sérialisation XML.
RĂ©duction de la consommation de mĂ©moire des classes de nĆuds.
Augmentation de la performance des téléversements FTP jusqu'à un facteur de 10x pour les téléversements volumineux.
Ajout des implémentations SSE2 et SHA-NI de SHA-256. Cela améliore les performances sur les processeurs pris en charge de ~1.3x (SSE2), et 3x - 5x (SHA-NI). Crédit à Colin Percival / Tarsnap pour cette optimisation.
mb_strcut() est désormais beaucoup plus rapide pour les chaßnes UTF-8 et UTF-16.
La recherche des noms d'encodage mbstring est désormais beaucoup plus rapide.
La performance de la conversion de SJIS-win en Unicode est grandement améliorée.
Augmentation de la performance de l'échappement MySQLnd.
Augmentation de la performance des groupes de capture nommés.
Augmentation de la performance de Random\Randomizer, avec un accent spécifique sur les méthodes Random\Randomizer::getBytes(), et Random\Randomizer::getBytesFromString()().
Augmentation de la performance et réduction de la consommation de mémoire de la sérialisation XML.
Les performances de strspn() et strcspn() sont grandement amĂ©liorĂ©es. Elles s'exĂ©cutent dĂ©sormais en temps linĂ©aire au lieu d'ĂȘtre bornĂ©es par un temps quadratique.
Augmentation de la performance de strpbrk().
get_browser() est désormais beaucoup plus rapide, jusqu'à 1.5x - 2.5x pour certains cas de test.