PHP 7 et PHP 8 sont deux versions majeures du langage de programmation PHP, et ils comportent plusieurs différences notables en termes de performance, de nouvelles fonctionnalités, et d’améliorations sur la syntaxe et la sécurité.
1. Performance: PHP 8 est connu pour offrir des performances significativement meilleures par rapport à PHP 7. Avec l’introduction du compilateur Just-in-Time (JIT), PHP 8 permet une exécution plus rapide du code. Le JIT compile le code PHP en code machine au moment de l’exécution, ce qui réduit le temps d’exécution pour des tâches répétitives et des applications intensives en calcul. Selon différents benchmarks, PHP 8 peut être jusqu’à deux fois plus rapide que PHP 7 pour certaines applications.
Source : https://www.php.net/releases/8.0/fr.php1. Nouvelles fonctionnalités: PHP 8 introduit plusieurs nouvelles fonctionnalités qui manquaient dans PHP 7 :
- Union Types : PHP 8 permet l’utilisation de types d’union, permettant à une variable de prendre plusieurs types. Par exemple, `function foo(int|float $number) {}` déclare que `$number` peut être soit un entier, soit un flottant.
- Match Expression : Une syntaxe améliorée et plus concise pour les conditions complexes, similaire au `switch`, mais plus puissante et plus concise. Par exemple :
\`\`\`php
$result = match ($variable) {
1 => “one”,
2, 3 => “two or three”,
default => “other“
};
\`\`\`
- Constructor Property Promotion : Simplifie la déclaration des propriétés dans les constructeurs en une seule ligne. Par exemple :
\`\`\`php
class Point {
public function \_\_construct(private int $x = 0, private int $y = 0) {}
}
\`\`\`
1. Améliorations syntaxiques et de sécurité: PHP 8 introduit plusieurs améliorations dans la syntaxe et la sécurité :
- Nullsafe Operator : Simplifie les vérifications nulles en enchaînant des appels de méthode sans avoir besoin de vérifier chaque fois si l’objet est nul. Par exemple :
\`\`\`php
$country = $session?->user?->getAddress()?->country;
\`\`\`
- Throw Expression : Permet l’utilisation de `throw` comme expression, rendant certaines constructions plus concises. Par exemple :
\`\`\`php
$value = $foo ?? throw new \InvalidArgumentException();
\`\`\`
1. Améliorations de type et de coercition:
- Static Return Type : PHP 8 permet désormais de déclarer `static` comme type de retour pour supporter un type de retour variadique dans les classes.
- Weak Maps : Introduction de cartes faibles, qui permettent de créer des associations clés-valeurs où les clés n’empêchent pas le ramasse-miettes de collecter les objets.
En conclusion, PHP 8 apporte des améliorations significatives par rapport à PHP 7 en termes de performance grâce au compilateur JIT, offre de nouvelles fonctionnalités qui simplifient et enrichissent l’écriture de code, et améliore la sécurité et la syntaxe du langage. Ces modifications font de PHP 8 une mise à jour très attendue et bénéfique pour les développeurs. Les sources utilisées pour ce document sont les documents de versions officiels de PHP, ainsi que des articles d’experts en développement PHP.