Les nouveautés de PHP 8.1

Par:
fredericmazue

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.