News sur PHP 8

News de PHP 8

PHP 8, la prochaine version majeure de PHP, sortira d’ici au 26 novembre 2020. PHP 8 est actuellement en développement très actif, les versions Alpha 1 et 2 étant sortie les 25 juin et 9 juillet dernier.

En raison des changements de rupture et des nouveautés de la version de PHP, il est nécessaire apporter des modifications à votre code pour le faire fonctionner sur PHP 8. Si vous êtes au courant de ces nouveautés, la mise à jour ne devrait pas être trop difficile, car la plupart des modifications de rupture étaient obsolètes auparavant dans les versions 7.*.

Outre les changements de rupture, PHP 8 apporte également un bel ensemble de nouvelles fonctionnalités telles que le compilateur JIT, les types d’union, les attributs, etc.

Les nouveautés

Union types

Les Union types sont une collection de deux types ou plus qui indiquent que l’un ou l’autre de ces types peut être utilisé. C’est une fonctionnalité qui sera très utiles par rapport aux spécificités de PHP.

Seul le type void ne pourra pas faire partie d’un union type, car il n’attend pas de valeurs de retour.
Il faut savoir aussi que le type null pourra être écrit en utilisant les notations |null ou ?Bar

public function foo(Foo|Bar $input): int|float;
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;

Compilateur JIT

Le compilateur JIT, promet des améliorations de performances significatives, mais pas toujours dans le contexte des requêtes Web.
Pour en savoir plus, je vous partage un article sur ce sujet : JIT in PHP 8.

Attributs

Les attributs, ou annotations, offrent un moyen d’ajouter des métadonnées aux classes, sans avoir à analyser les docblocks.
Voici un exemple de l’apparence des attributs :

use App\Attributes\ExampleAttribute;

@@ExampleAttribute
class Foo
{
    @@ExampleAttribute
    public const FOO = 'foo';
 
    @@ExampleAttribute
    public $x;
 
    @@ExampleAttribute
    public function foo(@@ExampleAttribute $bar) { }
}
@@Attribute
class ExampleAttribute
{
    public $value;
 
    public function __construct($value)
    {
        $this->value = $value;
    }
}

Vous pouvez approfondir le fonctionnement des attributs et voir comment créer les vôtres. Vous pouvez en savoir plus sur les attributs sur l’article PHP 8: Attributes.

Match expression

C’est la syntaxe équivalente au switch.
L’instruction match retourne les valeurs demandé, n’a pas besoin de break, peut combiner les conditions, et utilise les comparaisons strict.
Voici un équivalent entre les instructions switch et match :

SWITCH

switch ($input) {
    case 0:
        $result = "hello";
        break;
    case 1:
    case 2:
    case 3:
        $result = "world";
        break;
}

MATCH

$result = match($input) {
    0 => "hello",
    '1', '2', '3' => "world",
};

Propriété constructeur

Cette version de PHP ajoute du sucre syntaxique pour créer des objets de valeur ou des objets de transfert de données.
Au lieu de spécifier des propriétés de classe et un constructeur pour celles-ci, PHP peut maintenant les combiner en un seul.
En voici un exemple :

AVANT

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

APRES

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

Conclusion

Pour cet article, je me suis largement inspiré du blog de stitcher.io.
Il y a plein de news que je n’ai pas mis sur la nouvelle version du PHP. Je les mettrai à jour au fur et à mesure des semaines qui viennent.