Un aperçu de l’évolution récente de PHP
PHP est devenu le langage de référence pour le développement backend web, soutenant des millions de sites et d’applications à travers le monde. Chaque nouvelle version apporte des améliorations significatives en matière de performance, de syntaxe et de sécurité. De PHP 8.0 —qui a marqué une rupture avec le moteur JIT, les types d’union et les attributs— à PHP 8.4, l’évolution a été continue, visant à faciliter la vie des développeurs, à accroître la sécurité et à maintenir la pertinence de l’écosystème.
Principaux jalons récents :
-
PHP 8.0 (2020) : Moteur JIT, attributs, types d’union, améliorations dans les structures match, expression throw.
-
PHP 8.1 (2021) : Énumérations (enum), propriétés en lecture seule, Fibers pour la concurrence, améliorations de performance.
-
PHP 8.2 (2022) : Types en lecture seule, constantes readonly, dépréciation des propriétés dynamiques, types vrais.
-
PHP 8.3 (2023) : Types pour constantes de classe, améliorations de l’héritage, nouvelles fonctions pour les tableaux, performance optimisée.
- PHP 8.4 (2024) : Accent mis sur un code encore plus clair, sémantiquement précis et sécurisé, avec de nouvelles capacités pour gérer les propriétés, la visibilité, la gestion des données et l’API DOM.
Quelles nouveautés apporte PHP 8.4 ?
Hooks pour propriétés : getters et setters élégants et natifs
Une des avancées les plus remarquables de PHP 8.4 est l’introduction de hooks pour propriétés. Il est désormais possible de définir une logique personnalisée lors de la lecture ou de l’écriture d’une propriété, directement dans la déclaration, évitant ainsi la mise en œuvre manuelle des traditionnels méthodes getX
ou setX
. Cela améliore la lisibilité, réduit les erreurs et facilite l’intégration avec des IDE et des outils d’analyse.
Exemple avant (PHP <= 8.3) :
php
class Locale {
private string $codePays;
public function setCodePays(string $codePays): void {
$this->codePays = strtoupper($codePays);
}
// ...getter...
}
Exemple avec PHP 8.4 :
php
class Locale {
public string $codePays {
set (string $codePays) {
$this->codePays = strtoupper($codePays);
}
}
}
Ceci permet également d’implémenter des propriétés calculées et de contrôler l’attribution des valeurs de manière plus sécurisée.
Visibilité asymétrique : contrôle granulaire de lecture et écriture
PHP 8.4 permet de définir des portées différentes pour la lecture et l’écriture d’une propriété publique. Ainsi, une propriété peut être publique pour la lecture mais privée pour l’écriture, évitant l’écriture de méthodes répétitives et améliorant l’encapsulation.
php
class Version {
public private(set) string $version = ‘8.4’;
}
Désormais, n’importe quelle partie du code peut lire $version
, mais seuls des méthodes internes peuvent le modifier.
Nouvelle API DOM et support complet HTML5
La nouvelle API DOM basée sur l’espace de noms Dom
et la classe HTMLDocument
permet de manipuler des documents HTML5 de manière plus fiable, corrigeant d’anciens bugs et améliorant l’interopérabilité.
php
$dom = DomHTMLDocument::createFromString(‘
‘);
$node = $dom->querySelector(‘main > article:last-child’);
Dépréciations et marquage natif des méthodes obsolètes
Il est désormais possible d’utiliser l’attribut #[Deprecated]
pour signaler des méthodes, fonctions et constantes classées comme obsolètes, générant des avertissements automatiques.
php
class MyClass {
[Deprecated(message: "Utilisez getVersion à la place", since: "8.4")]
public function getOldVersion() { /* ... */ }
}
Améliorations sur BCMath et gestion de la précision arbitraire
PHP 8.4 intègre la classe BcMathNumber
, permettant des opérations mathématiques de haute précision avec une syntaxe plus intuitive.
php
use BcMathNumber;
$num1 = new Number(‘0.12345’);
$num2 = new Number(‘2’);
$result = $num1 + $num2; // ‘2.12345’
Nouvelles fonctions de tableaux
De nouvelles utilitaires sont ajoutées, comme array_find
, array_find_key
, array_any
et array_all
, rapprochant la gestion des tableaux en PHP des autres langages modernes.
php
$animal = array_find([‘chien’, ‘chat’, ‘vache’], fn($v) => str_starts_with($v, ‘c’)); // ‘chat’
Comparaison rapide : PHP 8.4 vs versions précédentes
Caractéristique | PHP 8.0 | PHP 8.1 | PHP 8.2 | PHP 8.3 | PHP 8.4 |
---|---|---|---|---|---|
Moteur JIT | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ Amélioré |
Enum | ❌ | ✔️ | ✔️ | ✔️ | ✔️ |
Propriétés readonly | ❌ | ✔️ | ✔️ | ✔️ | ✔️ |
Hooks propriétés | ❌ | ❌ | ❌ | ❌ | ✔️ Nouveauté |
Visibilité asymétrique | ❌ | ❌ | ❌ | ❌ | ✔️ Nouveauté |
API DOM HTML5 | ❌ | ❌ | ❌ | ❌ | ✔️ Nouveauté |
Attribut #[Deprecated] | ❌ | ❌ | ❌ | ❌ | ✔️ Nouveauté |
Nouvelles fonctions array_*() | ❌ | ❌ | ❌ | ✔️ | ✔️ Améliorées |
BCMath orienté objets | ❌ | ❌ | ❌ | ❌ | ✔️ Nouveauté |
Compatibilité backward | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (avec dépréciations) |
Pourquoi mettre à jour vers PHP 8.4 ?
-
Un code plus propre et maintenable grâce aux hooks et à la visibilité asymétrique.
-
Une sécurité accrue avec des contrôles d’accès et de nouvelles fonctions d’audit.
-
Un meilleur rendement grâce à l’optimisation du JIT et aux nouvelles fonctions natives.
-
Une plus grande compatibilité et soutien aux standards modernes dans le HTML5, les tableaux et la précision numérique.
- Une facilité pour le développeur avec moins de code répétitif, une clarté accrue dans les erreurs et des avertissements automatiques sur l’obsolescence.
Conclusion
PHP 8.4 marque la maturité du langage, facilitant l’écriture d’un code plus clair, robuste et sécurisé. Cette mise à jour s’avère particulièrement attrayante pour les projets neufs et existants cherchant à tirer parti des dernières tendances en développement web, à améliorer leur performance et à faciliter l’évolution de leur base de code.
La recommandation pour les équipes techniques et les développeurs est claire : si votre stack le permet, passez à PHP 8.4 et profitez de sa nouvelle architecture et de ses fonctionnalités avancées.