PHP 8 Alpha 1 est disponible

Par:
admin

ven, 26/06/2020 - 15:18

Le projet PHP vient d'annoncer la disponibilité de PHP 8 Alpha 1. La version finale est attendue pour décembre 2020. Cette version Alpha 1 ne doit bien sûr pas du tout être utilisée en production, mais elle peut servir à prendre en main cette nouvelle mouture du langage et se familiariser avec ses nouveautés.

Il faut savoir que PHP 8 une est version majeure du langage. En tant que telle, elle apporte des changement de rupture. En clair votre code PHP 7 va être cassé... Mais 'pas trop', d'après Christian Brent, spécialiste de PHP, qui souligne que la plupart des changements de rupture étaient obsolètes auparavant dans les versions 7.x.

Voici quelques unes des nouveautés de PHP 8.

Les types Union vont arriver avec PHP 8. Ils permettront de définir plusieurs types pour les arguments reçus par une fonction, ainsi que pour la valeur qu'elle retourne. Par exemple :

public function foo(Foo|Bar $input): int|float;

A noter que void ne peut pas faire partir d'une Union. Par contre les types 'nullable' peuvent faire partie d'une union en utilisant la notation |null.

A côté de self, static est désormais un type de retour de fonction.

class Foo
{
    public function test(): static
    {
        return new static();
    }
}

PHP 8 vient avec un compilateur JIT, ou 'Just in Time'. Ceci pour améliorer les performances. La question, dans le cas d'utilisation courant de PHP, est quand même de savoir lesquelles. Dans le contexte des requêtes web, le compilateur JIT n'apportera en principe pas grand chose. Mais dans le cas de traitements lourds, ce compilateur JIT aura sans doute son intérêt.

Les attributs, souvent appelés annotations dans d'autres langages, arrivent comme moyen pour ajouter des méta-données aux classes. Cela ressemble à ceci :

use App\Attributes\ExampleAttribute;

<<ExampleAttribute>>
class Foo
{
    <<ExampleAttribute>>
    public const FOO = 'foo';

    <<ExampleAttribute>>
    public $x;

    <<ExampleAttribute>>
    public function foo(<<ExampleAttribute>> $bar) { }
}

Un sucre syntaxique arrive pour soulager les développeurs lors de l'écriture du code d'instanciation des classes. Par exemple, au lieu décrire ceci :

class Money
{
    public Currency $currency;
    public int $amount;

    public function __construct(
        Currency $currency,
        int $amount,
    ) {
        $this->currency = $currency;
        $this->amount = $amount;
    }
}

il est maintenant possible d'écrire ceci :

class Money
{
    public function __construct(
        public Currency $currency,
        public int $amount,
    ) {}
}

PHP 8 contient de nombreuses autres nouveautés. Nous en mentionnerons encore une ici qui nous paraît intéressante : Throw devient une expression. Cette nouveauté permet de lever des exceptions dans de nombreux nouveaux endroits. Par exemple :

$triggerError = fn () => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

Les sources de PHP 8 Alpha 1 peuvent être téléchargés ici.