Aller au contenu principal

PHP 8.4 : rattrapage de retard ou véritable modernisation ?

PHP 8.4 introduit les Property Hooks, la visibilité asymétrique et un parser HTML5 natif. Découvrez les nouveautés majeures de cette version attendue depuis des années.
Catégorie

PHP

Le PHP de 2025 n'a plus rien à voir avec celui d'il y a 10 ans. Êtes-vous sûr d'utiliser tout le potentiel des dernières versions pour écrire un code moderne et ultra-performant ?

Lecture
4 min
Niveau
Intermédiaire
janv 28 2026
Partager

Novembre 2024 marque la sortie de PHP 8.4 avec une version qui répare des choix de conception vieux de vingt ans. Les Property Hooks débarquent, la visibilité asymétrique devient réalité, et le parser HTML5 rejoint enfin l'ère moderne. Pour un langage qui alimente encore une large portion du web, ces améliorations arrivent tard mais tombent juste. Pas de révolution, juste du pragmatisme et du rattrapage intelligent.

Property Hooks

Les Property Hooks permettent de définir des getters et setters directement sur les propriétés. À la manière de C#, Kotlin, ou Swift. PHP rattrape quinze ans de retard en une release.

PHP
class User {
    // Avant PHP 8.4 : le cauchemar verbeux
    private string $name;
    
    public function getName(): string {
        return $this->name;
    }
    
    public function setName(string $value): void {
        $this->name = ucfirst($value);
    }
}

// Avec PHP 8.4 : direct au but
class User {
    public string $name {
        get => $this->name;
        set => ucfirst($value);
    }
}

La syntaxe est propre. Elle économise des lignes. Les développeurs qui migraient vers TypeScript pour ce genre de fonctionnalités vont devoir reconsidérer.

Visibilité asymétrique

Vous voulez exposer une propriété en lecture mais bloquer l'écriture externe ? PHP 8.4 vous écoute. La visibilité asymétrique fait exactement ça.

PHP
class Product {
    // Lecture publique, écriture privée
    public private(set) string $id;
    public private(set) float $price;
    
    public function __construct(string $id, float $price) {
        $this->id = $id;
        $this->price = $price;
    }
    
    public function applyDiscount(float $percentage): void {
        // OK : on est dans la classe
        $this->price *= (1 - $percentage / 100);
    }
}

$product = new Product('ABC123', 99.99);
echo $product->price; // OK : lecture publique
$product->price = 50; // Erreur : écriture privée

Cette fonctionnalité répond à un besoin réel. Protéger l'état interne sans sacrifier l'accessibilité. Le genre d'amélioration qui ne fait pas les gros titres mais qui change le quotidien du code.

Instanciation sans parenthèses

Détail qui compte : les parenthèses vides deviennent optionnelles lors de l'instanciation. PHP rejoint enfin la plupart des langages modernes.

PHP
// Avant : obligatoire
$result = (new QueryBuilder())->select('*')->from('users')->get();

// PHP 8.4 : optionnel
$result = new QueryBuilder()->select('*')->from('users')->get();

// Également valide pour les attributs
#[Route('/api/users')]
class UserController {}

Chaque caractère économisé compte. Chaque simplification syntaxique rend le langage plus accessible.

Nouvelles fonctions de tableaux

Les tableaux PHP ont une API historique. PHP 8.4 ajoute array_find(), array_any(), et array_all(). Des fonctions qui auraient dû exister depuis PHP 5.

PHP
$users = [
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'Bob', 'age' => 30],
    ['name' => 'Charlie', 'age' => 35],
];

// array_find : premier élément qui correspond
$adult = array_find($users, fn($user) => $user['age'] >= 18);
// ['name' => 'Alice', 'age' => 25]

// array_any : au moins un élément correspond
$hasAdult = array_any($users, fn($user) => $user['age'] >= 18);
// true

// array_all : tous les éléments correspondent
$allAdults = array_all($users, fn($user) => $user['age'] >= 18);
// true

// Également : array_find_key pour récupérer la clé
$key = array_find_key($users, fn($user) => $user['name'] === 'Bob');
// 1

Parser HTML5

L'extension DOM intègre maintenant un parser HTML5 natif. Pour un langage historiquement lié au web, c'était une lacune embarrassante.

PHP
// Avant : DOMDocument parsait en XML/HTML4
$dom = new DOMDocument();
@$dom->loadHTML($html); // Le @ pour masquer les warnings

// PHP 8.4 : parser HTML5 natif
$dom = DOM\HTMLDocument::createFromString($html);
// Parse comme un navigateur moderne
// Gère les balises HTML5
// Pas de warnings pour du HTML valide

Cette mise à jour signifie que PHP peut enfin parser le HTML comme les navigateurs le font. Avec les spécifications actuelles. Le genre d'amélioration infrastructurelle qui ne se voit pas mais qui compte.

Autres améliorations notables

PHP 8.4 apporte son lot de corrections et d'optimisations. Rien de révolutionnaire, tout d'utile.

PHP
// PDO : nouvelle méthode pour obtenir le driver
$driver = $pdo->getDriver();

// BCMath : support des nombres comme objets
$num = new BcMath\Number('123.456');
$result = $num->add('78.9');

// Propriétés lazy : évaluation à la demande
class Report {
    public string $data {
        get {
            // Calculé seulement lors de l'accès
            return $this->generateExpensiveData();
        }
    }
}

Le mot de la fin

PHP 8.4 ne cherche pas à éblouir. Le langage avance par améliorations pragmatiques, comblant méthodiquement les lacunes qui handicapaient son usage au quotidien. Property Hooks, visibilité asymétrique, parser HTML5 : chaque ajout répond à un besoin concret, documenté par des années de frustration développeur.

Le langage reste critiqué, souvent déclaré obsolète. Pourtant il tient et il équipe toujours une part massive du web. Il évolue donc sans rupture, permettant aux millions de projets existants de progresser à leur rythme.

Cette version 8.4 illustre une approche : celle d'un langage qui assume son héritage tout en corrigeant ses erreurs. Alors pas de refonte totale, pas de belles promesses pour l'avenir avec des outils plus cohérents pour écrire du meilleur code.

Poursuivre la lecture

Sélectionné avec soin pour vous.

PHP

PHP 8.5 : pipe operator et nouvelles fonctionnalités

PHP 8.5 introduit le pipe operator, array_first(), array_last() et l'attribut NoDiscard. Découvrez les nouveautés qui modernisent le langage.

5 min de lecture
Symfony

PHP 8.4 Property Hooks : quand Doctrine 3.4 révolutionne vos Getters/Setters

Découvrez les Property Hooks PHP 8.4 avec Doctrine 3.4. Fini les getters/setters verbeux !

4 min de lecture
DevOps

Comment FrankenPHP a relégué PHP-FPM et Nginx au stade de reliques

Stop à Nginx + PHP-FPM. Découvrez pourquoi FrankenPHP est la solution moderne pour un setup Docker simple et performant.

13 min de lecture