Les nouveautés PHP 8.4

Publié le 28 août 2024 par Laravel Jutsu
Couverture de l'article Les nouveautés PHP 8.4

L'éléphant arbore une nouvelle panoplie

PHP 8.4 est prévu pour être publié le 21 novembre 2024. Avant la sortie officielle, il y aura une période de prépublication de 6 mois, comprenant des versions Alpha, Beta, Release Candidate, puis la version finale.

Si vous souhaitez vous amuser en testant cette nouvelle version, il est possible de le faire avec la version PHP 8.4.0 Beta 3.

On fait sauter les parenthèses

Avant cette version, il était possible d'accéder aux méthodes et propriétés lors d'une instanciation de la classe MaClasse en l'enveloppant de parenthèse comme ceci :

1$service = (new SynchronizePostsService())->updateImages();

Cette mise à jour rend l'accès aux membres de classe plus fluide, sans avoir à ajouter de parenthèses ou à utiliser une méthode de construction statique :

1$service = new SynchronizePostsService()->updateImages();

De nouvelles fonctions natives

Il est vrai que lorsqu'on utilise Laravel, on adore exploiter tout le potentiel des Collections. C'est au tour de PHP lui-même de faire la part belle aux fonctions utilitaires. C'est pas moins de 4 fonctions pour les tableaux qui seront ajoutées le 21 novembre prochain :

array_find()

La fonction array_find($array, $callback) retourne le premier élément pour lequel le $callback renvoie true :

1$array = [
2 'apple',
3 'mango',
4 'orange',
5 'banana',
6];
7 
8$fruit = array_find($array, fn (string $value) => strlen($value) > 5);
9 
10echo $fruit // string(6) "orange"

array_find_key()

La fonction array_find_key($array, $callback) retourne la clé du premier élément pour lequel le $callback renvoie true. Comme array_find(), elle renvoie null si aucun élément correspondant n'est trouvé :

1$array = [
2 'apple',
3 'mango',
4 'orange',
5 'banana',
6];
7 
8$key = array_find_key($array, fn (string $value) => strlen($value) > 5);
9 
10echo $key // int() 2

array_any()

Vous pouvez utiliser la fonction array_any() pour vérifier si au moins un des éléments du tableau retourne true.

1$array = [
2 'apple',
3 'mango',
4 'orange',
5 'banana',
6];
7 
8$any = array_any($array, fn (string $value) => strlen($value) > 5);
9 
10echo $any // bool(true)

array_all()

Vous pouvez utiliser la fonction array_all() pour vérifier si tous les éléments du tableau retournent true.

1$array = [
2 'apple',
3 'mango',
4 'orange',
5 'banana',
6];
7 
8$all = array_all($array, fn (string $value) => strlen($value) > 5);
9 
10echo $all // bool(false)
11 
12$all = array_all($array, fn (string $value) => strlen($value) > 4);
13 
14echo $all // bool(true)

N'hésitez pas à jeter un oeil au RFC.

L'éléphant se prend pour capitaine Crochet

PHP va accueillir les Property Hooks qui apporteront une nouvelle façon élégante de gérer les propriétés en PHP.

Elles simplifient la gestion des accesseurs et mutateurs, à l'instar de ceux que l'on utilise avec Eloquent avec une syntaxe fluide, inspirée par les langages modernes :

1class Podcast
2{
3 public string $details {
4 get => $this->title . ' | Episodes count: ' . $this->episodesCount;
5 
6 set(string $details) {
7 $parts = explode(';', $details);
8 $this->title = $parts[0];
9 $this->episodesCount = $parts[1];
10 }
11 }
12 
13 public string $title {
14 set(string $title) => $this->title = ucfirst($title);
15 }
16 
17 public string $episodesCount {
18 set(string $count) => $this->episodesCount = (int) $count;
19 }
20 
21 public function __construct(string $details) {
22 $this->details = $details;
23 }
24}
25 
26$podcast = new Podcast(details: 'laravel rules the world;10');
27 
28echo $podcast->title; // Laravel rules the world
29echo $podcast->episodesCount; // int() 10
30echo $user->details; // Laravel rules the world | Episodes count: 10

Nouvelles Fonctions mb_

PHP ajoute dans cette nouvelle version des variantes multi-octets des fonctions classiques comme trim, ltrim, rtrim, ucfirst et lcfirst :

Ces nouvelles fonctions sont conçues pour mieux gérer les chaînes de caractères encodées en UTF-8 et d'autres encodages multi-octets. Elles assurent un traitement correct des caractères dans les langues utilisant des encodages complexes, évitant ainsi les erreurs de manipulation des chaînes.

Back to the future 🏎️💨

Enfin, il sera plus simple de créer un objet DateTime à partir d'un timestamp Unix grâce à la nouvelle méthode createFromTimestamp(). Cette méthode supporte les timestamps classiques ainsi que ceux avec des microsecondes :

1$dt = DateTimeImmutable::createFromTimestamp(1633046400);
2$dt->format('Y-m-d'); // 2021-10-01
3 
4$dt = DateTimeImmutable::createFromTimestamp(1633046400.789);
5$dt->format('Y-m-d h:i:s.u'); // 2021-10-01 00:00:00.789000

Conclusion

La communauté PHP nous prouve encore une fois qu'elle sait nous réserver encore de belles surprises. L'avancée du langage n'augure que de très bonnes choses pour la suite.

Toutes ces nouvelles fonctionnalités arriveront à la fin de l'année mais il est déjà possible de les tester ! Suivez notre tutoriel si vous avez envie de découvrir cette nouvelle version du langage.

Alors ? Pensiez-vous aussi que PHP était mort ?

Laravel Jutsu avatar
Laravel Jutsu
Détective sur sa propre scène de crime 🎱

A lire

Autres articles de la même catégorie