- Inclut des hooks de propriétés, une visibilité asymétrique, une API DOM mise à jour, des améliorations de performances, des corrections de bugs et un nettoyage général
- Introduction des hooks de propriétés, qui prennent en charge des propriétés calculées compréhensibles nativement par les IDE et les outils d’analyse statique
- Introduction de la visibilité asymétrique, qui permet de contrôler indépendamment la portée de lecture et d’écriture des propriétés.
- Nouvelles fonctionnalités
- Le mécanisme existant de dépréciation de PHP peut désormais être appliqué aux fonctions personnalisées, méthodes et constantes de classe via l’attribut
#[\Deprecated].
- La nouvelle API DOM inclut une prise en charge conforme aux standards pour l’analyse des documents HTML5 et corrige plusieurs anciens bugs de compatibilité des fonctionnalités DOM.
- Les nombres à précision arbitraire peuvent être manipulés de manière orientée objet avec l’objet
BcMath\Number.
- Ajout de nouvelles fonctions de tableau comme
array_find(), array_find_key(), array_any(), array_all().
- Ajout de nouvelles sous-classes PDO : Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite.
- Il est désormais possible d’accéder aux propriétés et méthodes d’un objet nouvellement instancié sans parenthèses.
- Nouvelles classes, interfaces et fonctions
- Nouveaux Lazy Objects, implémentation JIT basée sur l’IR Framework.
- Ajout de la fonction
request_parse_body(), ainsi que de bcceil(), bcdivmod(), bcfloor(), bcround().
- Ajout de méthodes comme
DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond().
- Ajout des fonctions
mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst().
- Ajout des fonctions
pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), pcntl_waitid().
- Ajout des méthodes
ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), ReflectionProperty::isDynamic().
- Ajout des fonctions
http_get_last_response_headers(), http_clear_last_response_headers(), fpow().
- Ajout des méthodes
XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), XMLWriter::toMemory().
- Ajout de la fonction
grapheme_str_split().
- Dépréciations et ruptures de compatibilité
- Les extensions IMAP, OCI8, PDO_OCI et pspell ont été retirées du bundle et déplacées vers PECL.
- Les types de paramètres implicitement nullable sont désormais dépréciés.
- L’utilisation de _ comme nom de classe est désormais dépréciée.
- Élever 0 à une puissance négative est désormais déprécié.
- Le passage d’un mode invalide à
round() déclenche désormais une ValueError.
- Les constantes de classe des extensions sont désormais typées.
- La classe GMP est désormais déclarée final.
- Les constantes et fonctions liées à MYSQLI sont désormais dépréciées.
stream_bucket_make_writeable() et stream_bucket_new() renvoient désormais des instances de StreamBucket.
- Changement du comportement de
exit().
- La constante E_STRICT est désormais dépréciée.
- Améliorations de performances et de syntaxe
- Amélioration des performances, de la syntaxe et de la sûreté des types.
- Mise à niveau vers PHP 8.4 recommandée.
3 commentaires
Grâce à WordPress et Laravel, c’est au moins un langage qui ne mourra pas de faim.
Même si WordPress et Laravel disparaissent, c’est une langue qui ne vous laissera pas mourir de faim.
Avis Hacker News
La RFC précise pourquoi
$this->countryCodene provoque pas de récursion infinie. Le fait qu’en PHP, l’accès à une propriété puisse avoir un sens différent selon le contexte semble presque magique.En tant que programmeur PHP, je m’inquiète de la direction que prend PHP. Les nouvelles fonctionnalités du langage augmentent sa complexité pour des bénéfices discutables.
Je suis heureux de voir que PHP continue de prospérer. En 2021, le départ de Nikita Popov m’avait inquiété, mais PHP reste un bon langage avec une communauté de développeurs toujours active.
Ce que j’attends le plus, ce sont les property hooks. C’est une fonctionnalité qui me manquait en C#.
__get()et__set(), mais c’était lourd et cela nécessitait beaucoup d’annotations PHPDoc.En regardant la surcharge des accesseurs de tableaux, je suis tombé sur « Property Hooks ». J’ai été surpris d’apprendre que c’était une fonctionnalité ajoutée récemment.
Je suis satisfait de cette nouvelle version de PHP. Elle apporte de nombreuses améliorations : meilleure stack trace pour les closures, gains de performance, prise en charge de HTML5, lazy objects, etc.
J’attends avec impatience les objets bcmath. Plus que les opérateurs arithmétiques, j’apprécie de pouvoir faire des vérifications de type sur les données sans passer par une classe wrapper.
Je suis heureux de voir que PHP continue d’évoluer. Cela me rappelle mes débuts en freelance.
La nouvelle fonction
array_findde PHP montre un problème de conception du langage. Elle ressemble à l’existantearray_search, mais avec un ordre des arguments différent.Je ne comprends pas « public private(set) ». « readonly public » me semblerait plus approprié.
private(set)en Swift.