L’équipe de développement de PHP a annoncé la semaine dernière, le 26 novembre, la sortie de PHP 8 :
PHP 8.0 est une mise à jour majeure du langage PHP.
Elle contient beaucoup de nouvelles fonctionnalités et d’optimisations, incluant les arguments nommés, les types d’union, attributs, promotion de propriété du 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.
Voici la liste des principales nouveautés :
- Types d’union
- Arguments nommés
- Expression match
- Attributs
- Promotion de propriété du constructeur
- Opérateur Nullsafe
- Weak Maps
- JIT (Compilation à la Volée)
- Et bien plus encore…
Et l’explication concrète de certaines de ces nouveautés :
PHP 8 : Types d’union
Au lieu d’utiliser les annotations PHPDoc pour une combinaison de type, vous pouvez désormais utiliser des déclarations de type d’union natives qui sont validées au moment de l’exécution.
// PHP 7
class Number {
/** @var int|float */
private $number;
/**
* @param float|int $number
*/
public function __construct($number) {
$this->number = $number;
}
}
new Number('NaN'); // Ok
// PHP 8
class Number {
public function __construct(
private int|float $number
) {}
}
new Number('NaN'); // TypeError
PHP 8 : Arguments nommés
Dorénavant, indiquez uniquement les paramètres obligatoires, en excluant les paramètres facultatifs. Les arguments n’ont plus besoin d’être ordonnés et ils sont auto-documentés.
// PHP 7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
// PHP 8
htmlspecialchars($string, double_encode: false);
PHP 8 : Expression match
La nouvelle expression « match » est similaire à l’expression « switch » et présente les caractéristiques suivantes :
- C’est une expression, ce qui signifie que son résultat peut être stocké dans une variable ou renvoyé.
- Ses branches supportent les expressions d’une seule ligne et n’ont pas besoin de break ;
- Elle fait des comparaisons strictes.
// PHP 7
switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!
// PHP 8
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected
PHP 8 : Attributs
À la place des annotations PHPDoc, vous pouvez maintenant utiliser des métadonnées structurées avec la syntaxe native de PHP.
// PHP 7
class PostsController
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}
// PHP 8
class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}
PHP 8 : Promotion de propriété du constructeur
Moins de code répétitif pour définir et initialiser les propriétés.
// PHP 7
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;
}
}
// PHP 8
class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}
}
PHP 8 : Opérateur Nullsafe
En lieu et place des conditions de vérifications nulles, vous pouvez maintenant utiliser une chaîne d’appels avec le nouvel opérateur nullsafe. Lorsque l’évaluation d’un élément de la chaîne échoue, l’exécution de la chaîne entière est interrompue et la chaîne entière est évaluée comme nulle.
// PHP 7
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
// PHP 8
$country = $session?->user?->getAddress()?->country;
Bien sûr, ceci n’est qu’une liste non exhaustive des points forts de PHP 8. Consultez l’annonce officielle du lancement pour obtenir tous les détails.
Vous souhaitez vous exprimer à propos de cet article ? Commentez ci-dessous ou partagez-le avec nous sur Facebook ou Twitter, vous pouvez aussi regarder d’autres articles sur notre blog.