PHP 8 en huit morceaux de code

PHP 8 a beaucoup de nouvelles fonctionnalités, dans cette liste, nous examinerons les plus remarquables.

Avertissement: Le lien vers cet article en anglais était déjà dans le post du dernier condensé PHP. Si vous connaissez suffisamment la langue, il peut être utile de revenir à l'original, il y a beaucoup de notes de bas de page pour d'autres articles en anglais.

Temps


use \Support\Attributes\ListensTo;

class ProductSubscriber
{
    <<ListensTo(ProductCreated::class)>>
    public function onProductCreated(ProductCreated $event) { /* … */ }

    <<ListensTo(ProductDeleted::class)>>
    public function onProductDeleted(ProductDeleted $event) { /* … */ }
}

Au lieu de docblock, des attributs.

Oui, je sais, la syntaxe n'est peut-être pas celle que vous vouliez ou espériez. Peut-être préféreriez-vous @, @:, ou docblocks, ou autre chose. Mais il ne sera que ça. La seule chose qui mérite d'être mentionnée à propos de la syntaxe est que toutes les options ont été discutées, et il y a de très bonnes raisons pour lesquelles cette syntaxe a été choisie. Vous pouvez lire un bref résumé de ceci dans le RFC , ou vous pouvez lire toute la discussion sur le RFC dans la liste des composants internes .



Deux


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

public function bar(mixed $input): mixed;

La combinaison de types vous permet de spécifier plusieurs types à la fois. Il existe également un nouveau type mixte qui représente plusieurs types en même temps.



Trois


interface Foo
{
    public function bar(): static;
}

Vous pouvez spécifier statique dans le type de retour.



Quatre


[JIT]
opcache.jit=5

Compilateur JIT intégré.

Qu'est-ce que JIT?

"JIT" signifie "juste à temps" - "au bon moment". Vous savez probablement que PHP est un langage interprété: il n'est pas compilé en tant que programme en C, Java ou Rust. Au lieu de cela, il se traduit par du code machine - quelque chose que le processeur comprend - au moment de l'exécution.

"JIT" est une méthode qui compile des parties de code au moment de l'exécution afin qu'une version compilée puisse être utilisée à la place.

Considérez-le comme une «version mise en cache» de code interprété généré lors de l'exécution.

Plus en détail déjà écrit sur Habré



Cinq


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

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

throw peut être utilisé dans les expressions.



Six


try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

Vous pouvez omettre la variable d'exception si vous n'en avez pas besoin.



Sept


public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // …
}

Vous pouvez spécifier une virgule à la fin de la liste des paramètres.



Huit


str_contains('string with lots of words', 'words');

str_starts_with('haystack', 'hay');

str_ends_with('haystack', 'stack');

Nouvelles fonctions de chaîne. Je pense que leur nom parle de lui-même.
Ne nous leurrons pas: 8 blocs de code ne suffisent pas pour résumer toutes les nouveautés de PHP 8. Alors, ajoutons-en quelques-uns de plus.



Neuf


function bar(Stringable $stringable) { /* … */ }

Une nouvelle interface Stringable qui est automatiquement ajoutée aux classes qui implémentent la méthode __toString ().



Dix


$object::class

Appeler :: class directement depuis l'objet.



All Articles