PHP 8.4, sorti en novembre 2024, est devenu la norme sur les projets sérieux en 2026. Voici ce qu'il faut absolument connaître si vous maintenez du code PHP moderne.
1. Property hooks
La vraie révolution. Fini les getters et setters verbeux :
class Person {
public string $fullName {
get => "{$this->firstName} {$this->lastName}";
set (string $value) { [$this->firstName, $this->lastName] = explode(' ', $value, 2); }
}
}On accède à $person->fullName comme à une propriété publique, mais avec la logique d'un accesseur. C'est Kotlin-esque, c'est propre.
2. Asymmetric visibility
Lecture publique, écriture privée — sans boilerplate :
class Invoice {
public function __construct(
public private(set) float $total = 0.0
) {}
public function addLine(float $amount): void {
$this->total += $amount;
}
}Fini getTotal() pour un champ qu'on veut juste lire.
3. new() sans parenthèses
$config = new Config()->load('app.json')->freeze();Petit confort syntaxique, gros gain de lisibilité sur les chaînes fluentes.
4. Fonctions array : array_find, array_any, array_all
$admin = array_find($users, fn($u) => $u->role === 'admin');
$hasAdmin = array_any($users, fn($u) => $u->role === 'admin');
$allValid = array_all($users, fn($u) => $u->isValid());On arrête enfin d'écrire un foreach pour trouver un élément. C'est JavaScript dans PHP.
5. Classes et objets en attribut de type
PHP 8.4 améliore le système de typage pour mieux supporter les attributs génériques et les tagged unions. Les outils comme PHPStan et Psalm en profitent directement.
6. Lazy objects
Un objet n'est instancié qu'à son premier accès :
$reflector = new ReflectionClass(HeavyService::class);
$service = $reflector->newLazyGhost(fn($s) => $s->__construct(...));Utile pour l'injection de dépendances lourde.
7. Améliorations du JIT
Le JIT tracing introduit avec 8.4 rend les workloads CPU-bound 20 à 30 % plus rapides sur les benchmarks officiels. Pour une app web classique, l'impact reste modéré, mais pour du traitement intensif c'est significatif.
Migration : ce qui casse
Peu de breaking changes utilisateur, mais quelques deprecations à nettoyer : constantes implicitement nullables, E_STRICT supprimé, mysqli_ping() deprecated. La doc officielle de migration liste tout.
Faut-il migrer ?
Oui, et vite. PHP 8.2 n'est plus en support actif, PHP 8.3 arrive en fin de cycle. Pour les projets sensibles (paiement, données client), rester sur du PHP maintenu est non-négociable.
Besoin d'un audit ou d'une migration PHP ? Je le fais chez SunderDev.