Les nouveautés de PHP 8.1
mer, 03/02/2021 - 14:42
PHP 8 est sorti mi-décembre 2020, et PHP en en cours de développement actif. Cette nouvelle mouture devrait être publiée vers la fin novembre 2021. Voici quelques-unes des nouveautés auxquelles on peut s'attendre.
Vient tout d'abord l'extraction (unpacking) de valeurs de tableau avec des clés chaîne. Cette extraction existe pour les tableaux à clés numériques depuis PHP 7.4. Avec des clés chaîne, il devient possible d'écrire ceci :
$array1 = ["a" => 1];
$array2 = ["b" => 2];
$array = ["a" => 0, ...$array1, ...$array2];
var_dump($array); // ["a" => 1, "b" => 2]
Les énumérations pourrait arriver dans PHP 8.1 (la proposition est toujours en discussion). Cela pourrait donner quelque chose comme ceci :
enum Status {
case Pending;
case Active;
case Archived;
}
class Post
{
public function __construct(
private Status $status = Status::Pending;
) {}
public function setStatus(Status $status): void
{
// …
}
}
$post->setStatus(Status::Active);
Ce très intéressant billet développe l'intérêt qu'il y a à avoir des énumérations en PHP.
Avec PHP 8.1, il faut aussi s'attendre à des changements de rupture, dont un qui va sans doute casser pas mal de code. Ce changement concerne la table de symboles internes $GLOBALS. Selon l'équipe de PHP, le changement introduit aurait un impact significatif sur toutes les opérations de tableaux.
Ce changement veut que les accès à GLOBALS sans déréférencement renvoient une copie en lecture seule du tableau.
En clair, si
$GLOBALS[$une_variable] = $valeur;
reste légal, toutes les opérations comme
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
renverront une erreur.