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()
- array_find_key()
- array_any()
- array_all()
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 world29echo $podcast->episodesCount; // int() 1030echo $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
:
-
mb_trim
-
mb_ltrim
-
mb_rtrim
-
mb_ucfirst
-
mb_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-013 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 ?
A lire
Autres articles de la même catégorie
Cosmic dragon is back
Il y a fort fort longtemps un dragon était caché dans le framework...
Mathieu De Gracia
Sondage annuel de Laravel France
Laravel France a besoin de vous !
Mathieu De Gracia
Top 10 des posts en 2022
L'année se termine !
Mathieu De Gracia