Nouveautés de PHP 8.4
PHP 8.4, prévu pour le 21 novembre 2024, apporte des améliorations majeures. Découvrez les nouvelles fonctionnalités.
La version 8.4 de PHP, prévue pour une sortie le 21 novembre 2024, introduit plusieurs nouveautés et améliorations significatives. Voici les principaux changements :
Property Hooks
RFC : Property Hooks
La principale fonctionnalité de PHP8.4 est les Property Hooks. Cette fonctionnalité permet de définir des hooks get
et set
directement sur les propriétés, réduisant ainsi l'utilisation des getters et des setters traditionnels.
<?php
class User {
public string $fullName {
get: fn () => "{$this->firstName} {$this->lastName}"
}
public function __construct(
private string $firstName,
private string $lastName,
) {
}
}
$user = new User('Lorem', 'Ipsum');
print $user->fullName; // 'Lorem Ipsum'
Nouvelles fonctions pour les tableaux
RFC : Array Functions
PHP 8.4 introduit de nouvelles fonctions pour manipuler les tableaux plus facilement : array_find
, array_find_key
, array_any
, et array_all
.
$array = [
'a' => 'dog',
'b' => 'cat',
'c' => 'cow',
'd' => 'duck',
'e' => 'goose',
'f' => 'elephant'
];
array_find
Retourne le premier élément pour lequel le callback renvoie true
.
array_find($array, function (string $value) {
return strlen($value) > 4;
}); // string(5) "goose"
array_find_key
Retourne la clé du premier élément pour lequel le callback renvoie true
.
array_find_key($array, function (string $value) {
return strlen($value) > 4;
}); // string(1) "e"
array_any
Retourne true
si le callback renvoie true
pour un ou plusieurs éléments du tableau.
array_any($array, function (string $value) {
return strlen($value) > 5;
}); // bool(true)
array_all
Retourne true
si le callback renvoie true
pour tous les éléments du tableau.
array_all($array, function (string $value) {
return strlen($value) < 12;
}); // bool(true)
Créer un DateTime depuis un Timestamp
La création de date avec un timestamp est simplifiée avec PHP 8.4 grâce à l'ajout de la méthode createFromTimestamp
.
$timestamp = time(); // 1718398274
$datetime = DateTimeImmutable::createFromTimestamp($timestamp);
À noter, les timestamps en secondes sont supportés, tout comme les timestamps en microsecondes.
Cela rend obsolète la création de dates avec createFromFormat
.
$timestamp = time(); // 1718398274
$datetime = DateTimeImmutable::createFromFormat('U', (string) $timestamp);
New without parentheses
RFC : New Without Parentheses
Avec PHP8.4, il sera possible d'appeler directement des méthodes sur les instanciations de classes, sans parenthèses.
Actuellement, nous pouvons utiliser les deux syntaxes suivantes :
$flower = (new Seed())->grow();
// ou
$flower = new Seed();
$flower->grow();
Nous pourrons maintenant faire :
$flower = new Seed()->grow();
Paramètres nullable implicites
RFC : Deprecate Implicitly Nullable Types
Actuellement, une variable typée non null à laquelle on assigne null
comme valeur par défaut est implicitement nullable.
public function setKind(Kind $kind = null) {
// ...
}
Ici, on dit implicitement que $kind
est de type null
ou Kind
.
Ce comportement sera déprécié en PHP 8.4 et sera supprimé en PHP 9. La solution est de rendre le paramètre explicitement nullable :
public function setKind(?Kind $kind = null) {
// ...
}
Sans cette modification, une alerte sera levée :
Deprecated: Implicitly marking parameter $kind as nullable is deprecated, the explicit nullable type must be used instead.
Stéphane MULOT