PHP 8.5.0 Released!

Changements non rétrocompatibles

PHP Core

Les noms d'alias "array" et "callable"

Il n'est plus possible d'utiliser "array" et "callable" comme noms d'alias de classe dans class_alias()

Comparaison approximative d'objets non comparables

Comparer approximativement des objets non comparables (par exemple des enums, CurlHandle et d'autre classes internes) à des booléens était auparavant incohérent. Si comparé à un littéral booléen $object == true, il se comportait de la même manière que (bool)$object. Si comparé à une valeur statiquement inconnue $object == $true, il retournait toujours false. Ce comportement a été consolidé pour toujours suivre le comportement de (bool)$object.

Valeur de retour de gc_collect_cycles

La valeur de retour de gc_collect_cycles() n'inclut plus les chaînes et ressources qui ont été collectées indirectement via des cycles.

Substituer le mot-clé static dans une sous-classe finale

Il est désormais permis de substituer static par self ou le nom concret de la classe dans les sous-classes finales.

Gestionnaires de tick

Les gestionnaires de tick sont désormais désactivés après l'exécution de toutes les fonctions de fermeture, la destruction des objets et le nettoyage des gestionnaires de sortie.

Liaison des traits

Les traits sont désormais liés avant la classe parente. Il s'agit d'un changement comportemental subtil, mais qui devrait mieux correspondre aux attentes des utilisateurs.

Erreurs lors de la compilation et du chaînage des classes

Les erreurs émises lors de la compilation et du chaînage des classes sont désormais toujours différées et traitées après la compilation ou le chaînage des classes. Les erreurs fatales émises lors de la compilation ou du chaînage des classes provoquent le traitement immédiat de toutes les erreurs différées, sans appeler les gestionnaires d'erreurs définis par l'utilisateur.

Exceptions levées par les gestionnaires d'erreurs définis par l'utilisateur

Les exceptions levées par les gestionnaires d'erreurs définis par l'utilisateur lors du traitement des erreurs de chaînage des classes ne sont plus promues en erreurs fatales et n'empêchent plus le chaînage.

Erreur d'application d'attribut lors de la compilation

Appliquer #[\Attribute] à une classe abstraite, un enum, une interface ou un trait déclenche une erreur lors de la compilation. Auparavant, l'attribut pouvait être ajouté, mais lorsqu'ReflectionAttribute::newInstance() était appelé, une erreur était levée. L'erreur peut être différée de la compilation à l'exécution en utilisant le nouvel attribut #[\DelayedTargetValidation].

Le paramètre INI disable_classes

Le paramètre INI disable_classes a été supprimé car il provoque la rupture de diverses hypothèses du moteur.

Destructuration de valeurs non-tableaux

Destructurer des valeurs non-tableaux (autres que null) en utilisant [] ou list() émet désormais un avertissement.

Bzip2

bzcompress() lève désormais une ValueError lorsque $block_size n'est pas compris entre 1 et 9.

bzcompress() lève désormais une ValueError lorsque $work_factor n'est pas compris entre 0 et 250.

DOM

Cloner un DOMNamedNodeMap, DOMNodeList, Dom\NamedNodeMap, Dom\NodeList, Dom\HTMLCollection, et Dom\DtdNamedNodeMap échoue désormais. Cela n'a jamais réellement abouti à un objet fonctionnel, donc aucun impact n'est attendu.

FileInfo

finfo_file() et finfo::file() lèvent désormais une ValueError à la place de TypeError lorsque $filename contient des octets nuls. Cela aligne le type d'erreur levée pour être cohérent avec le reste du langage.

Intl

L'extension nécessite désormais au moins ICU 57.1.

IntlDateFormatter::setTimeZone()/datefmt_set_timezone() lèvent désormais une IntlException en cas de classes non initialisées ou d'échecs de clonage.

Toutes les méthodes Locale lèvent désormais une ValueError lorsque l'argument locale contient des octets nuls.

Le comportement de Collator::SORT_REGULAR en ce qui concerne la gestion des chaînes numériques est désormais aligné sur le comportement de SORT_REGULAR dans ext/standard.

LDAP

ldap_get_option() et ldap_set_option() lèvent désormais une ValueError lorsqu'une option invalide est passée.

MBString

Les tables de données Unicode ont été mises à jour vers Unicode 17.0

MySQLi

L'appel au constructeur mysqli sur un objet déjà construit n'est désormais plus possible et génère une Error.

ODBC

ODBC suppose désormais qu'au moins la fonctionnalité ODBC 3.5 est disponible. La définition ODBCVER et les indicateurs du système de construction pour la contrôler ont été supprimés.

ODBC ne dispose plus d'indicateurs de construction pour construire avec des pilotes spécifiques (sauf pour DB2) et supprime les cas spéciaux pour ces pilotes. Il est fortement recommandé d'utiliser un gestionnaire de pilotes comme iODBC ou unixODBC sur les systèmes non Windows.

Opcache

L'extension Opcache est désormais toujours intégrée dans le binaire PHP et toujours chargée. Les directives INI opcache.enable et opcache.enable_cli sont toujours prises en compte.

Les options de configuration --enable-opcache/--disable-opcache ont été supprimées, et la compilation ne produit plus les fichiers opcache.so ou php_opcache.dll.

L'utilisation des directives INI zend_extension=opcache.so ou zend_extension=php_opcache.dll émettra un avertissement.

PCNTL

pcntl_exec() lève désormais une ValueError lorsque les entrées du paramètre $args contiennent des octets nuls.

pcntl_exec() lève désormais une ValueError lorsque les entrées ou les clés du paramètre $env_vars contiennent des octets nuls.

PCRE

L'extension est compilée sans l'option semi-dépréciée PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.

PDO

Les arguments du constructeur définis en conjonction avec PDO::FETCH_CLASS suivent désormais la sémantique habituel de CUFA (call_user_func_array()). Cela signifie que les clés de chaîne agiront comme des arguments nommés. De plus, l'encapsulation automatique pour les arguments par valeur passés à un paramètre par référence a été supprimée, et l'habituel E_WARNING à ce sujet est désormais émis. Pour passer une variable par référence à un argument de constructeur utilisez l'affectation de référence de valeur de tableau générale : $ctor_args = [&$valByRef]

Essayer d'appeler PDOStatement::setFetchMode() pendant un appel à PDO::fetch(), PDO::fetchObject(), PDO::fetchAll(), par exemple en utilisant des astuces telles que passer l'objet statement comme argument de constructeur lors de la récupération dans un objet, lèvera désormais une Error.

La valeur des constantes PDO::FETCH_GROUP, PDO::FETCH_UNIQUE, PDO::FETCH_CLASSTYPE, PDO::FETCH_PROPS_LATE, et PDO::FETCH_SERIALIZE a changé.

Une ValueError est désormais levée si PDO::FETCH_PROPS_LATE est utilisé avec un mode de récupération différent de PDO::FETCH_CLASS, cohérent avec les autres indicateurs de récupération.

Une ValueError est désormais levée si PDO::FETCH_INTO est utilisé comme mode de récupération dans PDO::fetchAll(), similaire à PDO::FETCH_LAZY.

PDO_FIREBIRD

Une ValueError est désormais levée lorsqu'on essaie de définir un nom de curseur trop long sur un PDOStatement résultant du pilote Firebird.

PDO_SQLITE

SQLite PDO::quote() lève désormais une exception ou émet un avertissement, en fonction du mode d'erreur, si la chaîne contient un octet nul.

PDO::sqliteCreateCollation() lève désormais une exception si le callback a un type de retour incorrect, ce qui le rend plus conforme au comportement de Pdo\Sqlite::createCollation().

POSIX

posix_kill() lève désormais une ValueError lorsque l'argument process_id est inférieur ou supérieur à ce que la plateforme supporte (entier signé ou plage longue), posix_setpgid() lève désormais une ValueError lorsque process_id ou process_group_id est inférieur à zéro ou supérieur à ce que la plateforme supporte.

posix_setrlimit() lève désormais une ValueError lorsque les arguments hard_limit ou soft_limit sont inférieurs à -1 ou si soft_limit est supérieur à hard_limit.

Reflection

ReflectionAttribute::newInstance() peut désormais lever des erreurs pour les attributs internes si l'attribut a été appliqué sur une cible invalide et que l'erreur a été différée du temps de compilation au temps d'exécution via l'attribut #[\DelayedTargetValidation].

Session

Tenter d'écrire des données de session lorsque $_SESSION a une clé contenant le caractère pipe (|) émettra désormais un avertissement au lieu d'échouer silencieusement.

session_start() est désormais plus stricte concernant l'argument options. Elle lève désormais une ValueError si le tableau n'est pas une table de hachage, ou une TypeError si la valeur read_and_close n'est pas d'un type valide compatible avec int.

SimpleXML

Passer une expression XPath qui retourne autre chose qu'un ensemble de nœuds à SimpleXMLElement::xpath() émettra désormais un avertissement et retournera false, au lieu d'échouer silencieusement et de retourner un tableau vide.

SNMP

snmpget(), snmpset(), snmp2_get(), snmp2_set(), snmp3_get(), snmp3_set() et SNMP::__construct() lève désormais une ValueError lorsque le nom d'hôte est trop grand, contient un octet nul ou si le port est donné lorsqu'il est négatif ou supérieur à 65535, les valeurs de délai d'attente et de tentatives sont inférieures à -1 ou trop grandes.

SOAP

SoapClient::__doRequest() accepte désormais un nouveau paramètre optionnel $uriParserClass acceptant des arguments de type string ou null. null représente la méthode originale basée sur (parse_url()), tandis que les nouveaux backends seront utilisés lorsqu'on passe soit Uri\Rfc3986\Uri ou Uri\WhatWg\Url.

Sockets

socket_create_listen(), socket_bind() et socket_sendto() lèvent désormais une ValueError si le port est inférieur à 0 ou supérieur à 65535, et également si l'une des entrées du tableau hints est indexée numériquement.

socket_addrinfo_lookup() lève désormais une TypeError si l'une des valeurs de hints ne peut pas être convertie en int et peut lever une ValueError si l'une de ces valeurs dépasse la capacité.

socket_set_option() avec les options MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP lève désormais une exception si la valeur n'est pas un objet ou un tableau valide.

socket_set_option() avec le contexte multicast lève désormais une ValueError lorsque le socket créé n'est pas de la famille AF_INET/AF_INET6.

SPL

ArrayObject n'accepte plus les enums, car la modification des $name ou $value peut casser les hypothèses du moteur.

Le paramètre $length de la fonction SplFileObject::fwrite() est désormais nullable. La valeur par défaut est passée de 0 à null.

Standard

L'utilisation d'une fonction de la famille printf avec un formatteur qui ne spécifiait pas la précision réinitialisait incorrectement la précision au lieu de la traiter comme une précision de 0.

Tidy

tidy::__construct(), tidy::parseFile(), tidy::parseString() lève désormais une ValueError si la configuration contient une valeur invalide ou tente de définir une entrée interne en lecture seule, et une TypeError si une clé de configuration n'est pas une chaîne.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top