PHP 7.4 a été publié en décembre dernier et l’équipe de développement du langage a présenté la nouvelle version majeure PHP 8. Nous y retrouvons entre autres :- de nouvelles fonctionnalités :
- un compilateur JIT ;
- les « union types » ;
- les attributs ;
- une nouvelle classe WeakMap ;
- les simplifications de code apportées par les nouveaux constructeurs ;
- de nouvelles fonctions :
- des changements qui auront un impact sur le code existant (Breaking changes) ;
- la gestion de l’incrémentation d’index négatifs dans les tableaux ;
- des modifications sur la gestion des erreurs ;
- des modifications sur les valeurs par défaut des directives d’initialisation de PHP ;
- des fonctions supprimées.
Cette version contient donc beaucoup de nouvelles fonctionnalités et d'optimisations, incluant les arguments nommés, les types d'union, attributs, promotion de propriétés de constructeur, l'expression match, l'opérateur nullsafe, JIT (Compilation à la Volée), et des améliorations dans le système de typage, la gestion d'erreur, et de cohérence.
Compilation juste à temps (JIT)
PHP 8 introduit deux moteurs de compilation JIT (juste à temps/compilation à la volée). Le Tracing JIT, le plus prometteur des deux, montre environ trois fois plus de performances sur des benchmarks synthétiques et 1,5-2 fois plus de performances sur certaines applications à longue durée d'exécution. Généralement les performances des applications sont identiques à PHP 7.4.
Contribution relative du JIT à la performance de PHP 8
Amélioration du système de typage et de la gestion d'erreur
- vérification de type plus sévère pour les opérateurs arithmétiques et bit à bit ;
- validation de méthode abstraite des traits ;
- signature valide des méthodes magiques ;
- reclassifications des avertissements du moteur ;
- erreur fatale pour des signatures de méthodes incompatibles ;
- l'opérateur @ ne silence plus les erreurs fatales ;
- héritages avec les méthodes privées ;
- type mixed ;
- type de retour static ;
- types pour les fonctions internes Discussion e-mail ;
- objets opaques au lieu de ressources pour les extensions Curl, Gd, Sockets, OpenSSL, XMLWriter, et XML.
Opérateur Nullsafe
Au lieu de faire des vérifications conditionnelles de nul, vous pouvez utiliser une chaîne d'appel avec le nouvel opérateur nullsafe. Qui lorsque l'évaluation d'un élément de la chaîne échoue, l'exécution de la chaîne complète est terminée et la chaîne entière évaluée à null.
Ainsi, dans PHP 7 vous aviez
| Code PHP : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | $country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } } |
Dans PHP 8 vous avez son équivalent :
| Code PHP : | Sélectionner tout |
$country = $session?->user?->getAddress()?->country;
Expression match
La nouvelle instruction match est similaire à switch et a les fonctionnalités suivantes :
- Match est une expression, signifiant que son résultat peut être enregistré dans une variable ou retourné ;
- les branches de match supportent uniquement les expressions d'une seule ligne, et n'a pas besoin d'une déclaration break ;
- Match fait des comparaisons strictes.
Ainsi, dans PHP 7 vous aviez
| Code PHP : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | switch (8.0) { case '8.0': $result = "Oh no!"; break; case 8.0: $result = "This is what I expected"; break; } echo $result; //> Oh no! |
Et son équivalent en PHP 8
| Code PHP : | Sélectionner tout |
1 2 3 4 5 | echo match (8.0) { '8.0' => "Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected |
Types d'union
Au lieu d'annotation PHPDoc pour une combinaison de type, vous pouvez utiliser les déclarations de types d'union native qui sont validées lors de l'exécution.
Ainsi, en PHP 7 vous aviez
| Code PHP : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | /** @var int|float */ private $number; /** * @param float|int $number */ public function __construct($number) { $this->number = $number; } } new Number('NaN'); // Ok |
Et son équivalent en PHP 8
| Code PHP : | Sélectionner tout |
1 2 3 4 5 6 7 | class Number { public function __construct( private int|float $number ) {} } new Number('NaN'); // TypeError |
Promotion de propriétés de constructeur
Moins de code redondant pour définir et initialiser les propriétés.
En PHP 7 vous aviez
| Code PHP : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Point { public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0, ) { $this->x = $x; $this->y = $y; $this->z = $z; } } |
En PHP 8 vous avez
| Code PHP : | Sélectionner tout |
1 2 3 4 5 6 7 | class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0, ) {} } |
Attributs
Au lieu d'annotations PHPDoc,...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.
