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 la collecte des déchets.
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 pouvait retourner que true
en pratique.
hash_update()
a désormais un type de retour de true au lieu de
bool.
Il 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_LEVEL
Pdo\Firebird::READ_COMMITTED
Pdo\Firebird::REPEATABLE_READ
Pdo\Firebird::SERIALIZABLE
Pdo\Firebird::WRITABLE_TRANSACTION
Lors 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 colone 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'implementation 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 tel 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 les frais généraux 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 la cotation 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 reduction 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.