5 points par GN⁺ 2024-11-22 | 3 commentaires | Partager sur WhatsApp
  • 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

 
carnoxen 2024-11-23

Grâce à WordPress et Laravel, c’est au moins un langage qui ne mourra pas de faim.

 
budaestew 2024-11-23

Même si WordPress et Laravel disparaissent, c’est une langue qui ne vous laissera pas mourir de faim.

 
GN⁺ 2024-11-22
Avis Hacker News
  • La RFC précise pourquoi $this->countryCode ne 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.

    • Il y a cette magie du langage où un accès à une propriété est transformé en appel de méthode.
    • Je n’utilise pas PHP, mais l’ajout de cette complexité au langage m’inquiète.
  • 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.

    • Les property hooks impliquent qu’un accès à une propriété peut être transformé en appel de méthode.
    • J’ai utilisé des fonctionnalités similaires en JS et en Perl, mais des méthodes explicites sont plus claires et plus faciles à faire évoluer.
  • 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#.

    • J’ai déjà essayé de l’imiter avec __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 ravi de voir arriver dans PHP de l’expressivité et du sucre syntaxique inspirés d’autres langages.
  • 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_find de PHP montre un problème de conception du langage. Elle ressemble à l’existante array_search, mais avec un ordre des arguments différent.

    • Elle a été ajoutée parce que d’autres langages ont ce type de fonction, mais dans la plupart des cas, ces langages n’en font pas une fonction globale.
  • Je ne comprends pas « public private(set) ». « readonly public » me semblerait plus approprié.

    • Cela semble similaire à private(set) en Swift.