La dernière version de PHP est enfin sortie officiellement depuis le 21 novembre ! Préparez votre nouvelle image docker pour migrer vos applications…
Lors de la dernière conférence de l’AFUP, Derick Rethans, contributeur PHP avait ouvert le bal pour nous présenter les nouveautés de cette dernière version mineure lors de son talk dont les copies d’écran suivantes sont extraites.
Release cycle
Avant de parler code, les équipes de support du langage nous propose une nouvelle organisation des releases.
Chaque version de PHP verra désormais sa durée de support étendue à 4 ans, soit deux années de maintenance active (correction de bugs) et deux années de correctifs de sécurité (qui était limité à un an auparavant).
La fin de chaque cycle a été étendue jusqu’à la fin de l’année (avant les cycles se terminaient 2 et 3 ans jour pour jour). Donc pour la version actuelle, avant ce changement, vu que la version 8.4 est sortie le 21 novembre 2024, la fin de sa maintenance active aurait été prévue le 21 novembre 2026 et celle des patchs correctifs de sécurité le 21 novembre 2027. Mais selon la revue des cycles, sa maintenance active prendra fin le 31 décembre 2026 et définitivement le 31 décembre 2028, ce qui laisse de la marge avant de migrer…
La prise en charge des changements dit « mineurs » est maintenant autorisée officiellement lors de la période bêta de la version (c’était déjà le cas dans les faits) mais n’est plus acceptée pendant la période corrective (RC) pour éviter les régressions.
Le nombre de RC a d’ailleurs été limité au nombre de 4 car les périodes de corrections étaient trop longues.
JIT
Au niveau du code, les nouveautés ne sont pas révolutionnaires hormis une amélioration significative du JIT (Just In Time). Il est toujours désactivé par défaut mais il est maintenant possible de préciser la taille du buffer alloué dans le fichier ini. Si pour vous le JIT est un mystère ou un concept encore un peu flou, nous vous invitons à regarder notre vidéo de la version 8 dans laquelle nous expliquons son fonctionnement.
Quelques améliorations de code intéressantes quand même avec :
Les property hooks
Inspiré par Kotlin ou swift, les property hooks permettent de déclencher des actions suite à la récupération (_get()) ou à l’édition (_set()) d’une propriété.
- cumuler deux attributs dans un autre pour afficher le nom complet d’une personne par exemple
- mettre à jour la date de modification d’une entité
- générer une exception lors de l’édition d’un e-mail
Fonctions de tableaux
Quelques fonctions bien pratiques viennent agrandir la famille de manipulation des tableaux :
- array_find() arrive enfin ! des années que nous l’attendions et qui nous fait rager quand on passe du javascript au PHP ! Fini le `array_filter()` suivi d’un [0] ou préfixé d’un `first()`, nous pouvons désormais attendre qu’un seul résultat de tableau et enfin bien typé.
- array_find_key() Idem que la fonction array_find() mais pour les clés de tableau
- array_all() Permet de vérifier que toutes les occurrences du tableau respectent la condition fournie dans la fonction
- array_any() Permet de vérifier qu’aucune occurrence du tableau ne respecte la condition
Attribut #deprecated
L’avènement de l’attribut deprecated (petit-à-petit on va réussir à supprimer toutes les annotations ;-)). On peut y spécifier un message et une propriété since
pour indiquer une version ou une date.
Et d’autres nouveautés :
- Ajout de quatre nouveaux modes d’arrondis pour la fonction round
- Ajout de la fonction
request_parse_body
() qui permet de récupérer les valeurs envoyées dans php://input - une amélioration majeure (!) dans l’extraction de chaîne pour enfin récupérer les émojis avec grapheme_str_split()
- quelques fonctions pour gérer les caractères unicode:
- nettoyage des caractères invisibles : mb_trim(), mb_ltrim(), mb_rtrim()
- changement de casse : mb_ucfirst(), mb_lcfirst()
- simplification du langage pour appeler la méthode d’une classe instanciée « à la volée »
new Class()->__toString()
- des nouvelles constantes et fonctions supportent CURL pour affiner les requêtes
- l’objet Datetime a maintenant sa fonction de création depuis un timestamp : DateTimeImmutable::createFromTimeStamp() et la possibilité de récupérer et modifier les microsecondes : get/setMicrosecond()
- et encore d’autres changements, dépréciations, etc… que vous pouvez retrouver ici
Merci pour votre attention et à bientôt pour d’autres nouvelles PHP.
Article rédigé par Guillaume Meot – Architecte PHP @Sedona