PHP 8.4 : Les fonctionnalités à retenir pour les développeurs
26 novembre 2024PHP 8.4 arrive, et avec lui son lot de nouvelles fonctions, changements de syntaxe et constantes ultra spécifiques pour ces 15 personnes dans le monde qui en ont besoin… Concentrons-nous plutôt sur ce qui va nous servir tous les jours !
Les hooks de propriétés : une révolution dans la gestion des accesseurs
On va vite zapper le côté visibilité asymétrique, qui est sympa sur le papier, mais qui donne un peu la migraine à comprendre. On va plutôt se concentrer sur la nouvelle syntaxe absolument banger :
À voir comment tout ça va se combiner avec du typage fort sur les méthodes. Mais dans sa version la plus simple, ça fait quand même gagner de la place !
Simplifiez votre code : fini les parenthèses sur "new"
La syntaxe parle d’elle-même. C’est un petit rien mais ça fait plaisir !
La “rétro” compatibilité avec DateTime::createFromTimestamp()
La rétrocompatibilité avec DateTime::createFromTimestamp() est une fonctionnalité très pratique lorsqu’on doit travailler avec des bases de données qui stockent des timestamps UNIX au lieu de valeurs au format DateTime. Ces bases de données, parfois anciennes ou conçues pour des raisons de performance, utilisent souvent des entiers pour représenter les dates et les heures.
👉 Pourquoi c’est utile ?
Les timestamps sont des entiers simples, ce qui les rend compacts et faciles à manipuler dans certaines bases de données.
Cependant, leur lecture directe n'est pas intuitive pour les développeurs ou les utilisateurs.
Adieu aux paramètres explicitement Null : ce qui change en PHP 8.4
Fini les :
Désormais, les paramètres null doivent être déclarés en tant que paramètres facultatifs :
Ou, si vous avez l’âme d’une développeur JS (ça fait quelques versions que PHP lorgne du côté de TypeScript, vous ne trouvez pas ?) :
Lazy Objects en PHP : gérez vos dépendances avec style
Bon, il y a tricherie, on entre dans de l’avancée qui ne servira pas beaucoup au tout-venant. MAIS, c’est quand même vachement cool et il y a fort à parier que ça prenne beaucoup d’importance dans le futur.
Les lazy object, c’est quoi ?
Pour vulgariser, c’est des objets que vous pouvez injecter en dépendance, mais dont l’initialisation ne se fait qu’au moment où vous avez besoin de les utiliser. C’est un pattern déjà existant, vous l’avez peut-être déjà vu. C’est désormais nativement possible pour éviter de le coder soi-même.
À quoi ça sert ?
Imaginons, dans votre arbre d’injections de dépendances entre services, vous arrivez à un service, par exemple un repository, qui dans son constructeur fait une requête dans la base de données.
Plutôt anodin, une requête dans le constructeur, mais admettons. On a qu’à dire que pour travailler, le service a besoin de la date de création de la dernière entité créée.
Problème, avec les injections de dépendances difficiles à suivre, ce service finit par être injecté dans un bout de code pendant qu’il y a une transaction doctrine en cours sur cette même entité. Et là, vous vous retrouvez avec une erreur insupportable. Si vous la connaissez, vous savez l’effet qu’elle fait : “The EntityManager is closed”.
Et bien avec les lazy objects / lazy services, vous pouvez injecter votre Repository tranquillement et ne l’initialiser que si vous êtes dans du code qui va vraiment en avoir besoin. Et BAM ! Ça fait des chocapics de code !
Ça a l’air un peu complexe à aborder comme ça mais une fois familiarisé vous ne serez pas déçu !
Attention par contre. N’allez pas tout rendre lazy sans réfléchir, ça a un coût niveau performance 😉.
PHP 8.4 : un pas de plus vers la performance et l’innovation
Voilà, c’est tout pour ce petit tour du propriétaire des choses “à retenir pour le tout-venant”. Evidemment il y a plein de choses qui n’ont pas été dites, mais le gros de ce qui va vous servir au quotidien est là.
Ce qu’il faut retenir c’est que PHP continue son petit bout de chemin pour regagner en popularité et performance en piochant à droite à gauche des bons concepts pour se les approprier. Et qu’après le bon en avant qu’a été PHP8, celui-ci montre qu’il a encore de belles années devant lui, quoi qu’en dise ses détracteurs 😉.