PHP 8 : retour sur les nouvelles fonctionnalités !

Le langage PHP en est à sa huitième version. La version 8.0.0, sortie en novembre 2020, connaît déjà ses premiers fix avec une version 8.0.3 datant de mars 2021. Quelles sont les nouvelles fonctionnalités les plus intéressantes et l’intérêt de cette nouvelle mise à jour majeure au cœur des projets de développement web ? Empreinte Digitale, vous en dit plus !

PHP 8 ou l’amélioration des performances

La nouvelle mise à jour de PHP 8 s’accompagnait de nouvelles fonctionnalités très attendues ; parmi elles :

  • Le compilateur JIT (Just In Time) : le compilateur JIT vient remplacer la représentation intermédiaire que sont les opcodes en code natif. Cette nouvelle fonctionnalité améliore nettement les performances si le code PHP effectue des actions gourmandes en ressources CPU. En revanche, le gain de performance reste moindre dans le cas d’une application web standard, où la majorité du temps d’exécution d’une requête est composé d’IO (requête de base de données, lecture de fichiers).
  • Les arguments nommés :  la fonctionnalité est présente depuis de nombreuses années dans beaucoup de langages, dont Python. Il est dorénavant possible de spécifier uniquement les paramètres requis sans tenir compte de ceux qui sont optionnels. Les arguments sont indépendants de l’ordre et auto-documentés.
  • Type Union : au lieu d’établir une documentation annexe avec PHP, il est désormais très simple de gérer l’union de variables ; ces déclarations d’unions sont désormais validées nativement par PHP 8.
  • Weakmaps : encore une nouvelle fonctionnalité pour des performances améliorées ! Weakmaps vient étendre les fonctionnalités de Weakrefs et apporter une économie de ressources dans la manipulation et surtout la suppression des objets.
  • L’opérateur Nullsafe : terminé les vérifications conditionnelles de null ! Avec l’opérateur Nullsafe, si l’évaluation d’un élément de la chaîne n’est pas concluante, la chaîne complète est considérée comme null.

Ce que PHP 8 change pour les développeurs

Même si l’on peut – l’on doit – s’enthousiasmer pour les tous nouveaux Just-in-time compilers (il y en a deux) ou les #[Attributs], PHP 8 demeure, pour les développeurs, une version apportant essentiellement des facilités syntaxiques. Les amateurs de code toujours plus concis et explicite y trouveront leur compte.

Si, en PHP 7.4, on devait écrire :


class Truc
{
    /**
     * @var int|float
     */
    private $nombre;
    
    private ?\Psr\Log\LoggerInterface $logger;
    
    /**
     * @param int|float $nombre
     */
    public function __construct($nombre, ?\Psr\Log\LoggerInterface $logger = null)
    {
        $this->nombre = $nombre;
        $this->logger = $logger;
    }
    
    public function multiplieEtAjoute($mul, $add)
    {
        if (isset($this->logger)) {
            $this->logger->debug("multiplieEtAjoute mul=$mul add=$add");
        }
        return $this->nombre * $mul + $add;
    }
}

on peut maintenant écrire :


class Truc
{
    public function __construct(
        private int|float $nombre,
        private ?\Psr\Log\LoggerInterface $logger = null
    ) {}
    
    public function multiplieEtAjoute(int|float $mul, int|float $add): int|float
    {
        $this->logger?->debug("multiplieEtAjoute mul=$mul add=$add");
        return $this->nombre * $mul + $add;  
    }
}

On obtient un code à la fois plus clair et plus court, et un certain nombre d’autres évolutions mineures vont également dans ce sens.

PHP 8 chez Empreinte Digitale : le choix de la stabilité

La mise à jour de PHP 8 est ce que l’on appelle une “majeure”. Il y a donc a un passage depuis PHP 7.4, dernière mise à jour de la mineure.

Les mises à jour de la mineure contiennent le plus souvent des patchs et des corrections pour certaines fonctionnalités. Avec ce type de mise à jour, le code existant ne risque pas d’être “cassé”. Si le passage de PHP 7.4 à PHP 8 implique un risque minime, il n’en est pas de même pour le reste de l’écosystème de développement.

La problématique principale du passage à PHP 8 concerne les dépendances installées avec Composer. En effet, beaucoup d’entre elles indiquent une majeure de PHP à ne pas dépasser pour une installation effective. Le risque avec le passage à PHP 8 : ne plus pouvoir installer des dépendances si le mainteneur n’indique pas explicitement que la nouvelle version de PHP est prise en charge.

Par exemple, nous utilisons Sonata pour gérer toute la partie admin des sites et applications que nous créons. De nombreuses dépendances de SonataAdmin ne supportaient pas la version 8 de PHP. Il a donc fallu attendre la mise à jour du bundle en question.

Chez Empreinte Digitale, nous continuons donc d’utiliser la septième version de PHP pour des raisons de stabilité dans nos projets.

PHP 8 ravira les développeurs en quête d’un code plus concis et augure déjà de nouvelles évolutions majeures. Le meilleur est à venir au niveau du langage, avec l’arrivée, en fin d’année, de PHP 8.1. On y trouvera notamment des améliorations de l’opérateur de spread, l’apparition des types enum, et surtout les Fibers ! Avec les Fibers, sorte de threads que l’on trouve dans de nombreux langages, la porte vers la programmation asynchrone sera enfin grande ouverte.

Nous vous ferons part de nos retours d’expérience et de nos tests ! Restons connectés, suivez-nous sur twitter !