• Contact us
  • Documentation
  • Login
Watch a demoFree trial
Blog
Blog
BlogProduitÉtudes de casNouvellesPerspectives
Blog

Principales fonctionnalités et améliorations de PHP 8.1

PHP
31 décembre 2021
Thomas di Luccio
Thomas di Luccio
Ingénieur DevRel
Partager
Cette page a été rédigée en anglais par nos experts, puis traduite par une IA pour vous y donner accès rapidement! Pour la version originale, c’est par ici.

Quelques jours seulement après sa sortie officielle, nous sommes ravis d'annoncer la disponibilité immédiate de PHP 8.1 pour tous les projets du forfait Grid. La nouvelle fondation PHP publie une nouvelle version majeure chaque année à la toute fin du mois de novembre, et c'est en quelque sorte un Noël avant l'heure pour nous, développeurs et créateurs d'applications.

Nouveautés et accélération

PHP 8.1 apporte de nombreuses fonctionnalités nouvelles et attendues depuis longtemps, telles que les énumérations, les propriétés en lecture seule, la syntaxe callable de premier ordre et new dans les initialiseurs.

Il apporte également de belles améliorations de performances, estimées entre 5 et 8 %. Dmitry Stogov, l’auteur de cette fonctionnalité impressionnante, la décrit comme une nouvelle technologie transparente qui élimine la surcharge liée à l’héritage de classes PHP.

Enfin, les Fibers pourraient bien constituer un changement révolutionnaire dans l’écosystème PHP en ajoutant un mécanisme de bas niveau pour gérer le parallélisme.

Ces fonctionnalités et bien d’autres sont désormais disponibles. Et tu peux les essayer dès aujourd’hui.

Enums

C'est une fonctionnalité que j'attendais depuis des années, et j'ai hâte de l'utiliser car c'est un moyen très pratique de gérer des collections de valeurs constantes.

enum Status {
  case Draft;
  case Published;
  case Archived;
}

Copie l'extrait

class Post
{
    public function __construct(
        private Status $status = Status::Draft;
        // ...
    ) {}

    public function getStatus(): Status
    {
        return $this->status;
    }

    public function setStatus(Status $status): void
    {
        $this->status = $status;
    }
}

$post->setStatus(Status::Active);

Copier l'extrait

Les énumérations peuvent même avoir des méthodes et des interfaces. C'est génial, non ?

enum Status
{
    // …

    public function color(): string
    {
        return match($this)
        {
            self::Draft => 'grey',
            self::Published => 'green',
            self::Archived => 'red',
        };
    }
}

Copier l'extrait

interface HasColor
{
    public function color(): string;
}

Copier l'extrait

enum Status implements HasColor
{
    // ...

    public function color(): string { /* … */ }
}

Copier l'extrait

Propriétés en lecture seule

Les propriétés de classe peuvent être marquées comme en lecture seule. Ça veut dire qu'elles ne peuvent être écrites qu'une seule fois, et une exception sera levée dans le cas contraire.

class Post {
    public function __construct(
        public readonly string $title,
        ...
    ) {}
}

Copier l'extrait

$post = new Post(title: ‘PHP 8.1 is available’, /* … */);
// All good, life is great.

$post->title = 'Some other and less fancy title';
// Error: Cannot modify readonly property Post::$title

Copier l'extrait

Syntaxe des callables de premier ordre

PHP 8.1 introduit une nouvelle syntaxe pour créer un callable. Tu peux désormais créer une fermeture à partir d'un callable en appelant ce callable et en lui passant ... en tant qu'argument :

function love(Human $a, Human $b) {
    /* What is love … */
}

$love = love(...);

$love(a: $someone, b: $someoneElse);

Copier l'extrait

new

Ces fonctionnalités permettent une utilisation plus large du new mot-clé, qui peut désormais être utilisé dans les définitions de fonctions en tant que paramètre par défaut et arguments d'attributs.

Associée à la promotion des propriétés du constructeur introduite avec PHP 8.0, cela peut réduire considérablement la taille des classes. Moins de bruit et plus de signal : plus d'espace pour les développeurs zen.

class FooController {
    public function __construct(
        private Logger $logger = new BarLogger(),
    ) {}
}

Copier l'extrait

Fibres

Les fibres sont un nouveau mécanisme de bas niveau destiné à faciliter la concurrence. Elles permettent la création de fonctions « full-stack » et interruptibles pouvant être utilisées pour implémenter le multitâche coopératif en PHP. Elles sont également décrites comme des « green threads », car elles exécutent du code en parallèle sans s’appuyer sur un environnement multithread.

$catFiber = new Fiber(function (): void {
    // …
    $value = Fiber::suspend('taking a nap');
    echo ‘Cat fiber resuming its activity because of: ‘ . $value;
});

$value = $catFiber->start();
echo ‘Current value from this cat fiber: ‘ . $value;
// Current value from cat fiber suspending: taking a nap

$catFiber->resume(‘some random noise’);
// Cat fiber resuming its activity because of: some random noise

Copier l'extrait

Même s’il ne s’agit pas véritablement de fonctionnalités asynchrones ou multithread, les Fibers pourraient tout de même ouvrir de nouvelles perspectives pour l’écosystème PHP, car elles marquent un tournant dans les paradigmes historiques de PHP. Découvre-en plus sur les Fibers avec le RFC.

Essaie-le dès aujourd’hui

PHP 8.1 introduit effectivement des changements majeurs susceptibles d’affecter les anciens codes. Tu voudras peut-être tester ton application avant de mettre à jour la version de PHP. Bonne nouvelle : tester PHP 8.1 ne pourrait pas être plus simple. Commence par créer une nouvelle branche dans ton dépôt. Ensuite, mets à jour ton ./.upsun/config.yaml fichier dans cette branche et remplace la clé type par :

type: php:8.1

Copie l'extrait

Commit Git et déploie : cette branche fonctionne désormais sous PHP 8.1. Teste ton application, exécute tes tests d'intégration et vérifie si des mises à jour sont nécessaires. Une fois les modifications apportées, fusionne cette branche avec ta branche principale. Félicitations, tu utilises désormais PHP 8.1 en production.

Bon déploiement, PHP !

Restez informé

Abonnez-vous à notre newsletter mensuelle pour les dernières mises à jour et nouvelles.

Votre meilleur travail
est à l'horizon

Essai gratuit