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.


Image de profil - Stéphane MULOT

Stéphane MULOT

Développeur PHP (Symfony / Laravel)