Php 8 - ce qu'il faut retenir

Les fonctions et ses arguments

Les arguments nommés permettent de passer des arguments à une fonction en se basant sur le nom du paramètre, plutôt que sur sa position. Cela rend la signification de l'argument auto-documentée, rend les arguments indépendants de l'ordre, et permet de sauter les valeurs par défaut de manière arbitraire.

<?php
function foo(
    ?string $arg_1 = "bar_1", 
    ?string $arg_2 = "bar_2", 
    ?string $arg_3 = "bar_3") {
    /** ... **/
}
foo("input_standard", arg_3: "input_specified");

Chaîne d'éléments nullables

Le court-circuitage consiste à sauter l'évaluation d'une expression en fonction d'une condition donnée. Les opérateurs && et || en sont deux exemples courants. L'opérateur nullsafe ?-> peut implémenter le court-circuitage de trois manières différentes. Nous allons examiner le même extrait de code pour chaque option.

null?->foo(bar())->baz();

Cette absence totale de court-circuit ne se retrouve actuellement que dans des Hacks. La fonction bar() et la méthode baz() sont toutes deux appelées. baz() provoquera une erreur "Call to a member function on null". L'évaluation des arguments des méthodes en fait la plus surprenante des trois options. C'était la principale critique du dernier RFC.

C'est ce qui serait normalement considéré comme une absence de court-circuit. La fonction bar() n'est pas appelée, la méthode baz() l'est. baz() provoquera une erreur "Call to a member function on null".

Nous appellerons cela un court-circuit complet. Ni la fonction bar() ni la méthode baz() ne sont appelées. Il n'y aura pas d'erreur "Call to a member function on null".

Construction de class simplifié

Lorsqu'un paramètre de méthode est préfixé par l'un des mots-clés de visibilité public, protected ou private, il est considéré comme "promu". Pour chaque paramètre promu, une propriété du même nom sera ajoutée, et une affectation de transfert à cette propriété sera incluse dans le corps du constructeur.

<?php
Class UnComplexify {
    public function __construct() {
        public $attribut_1 = "value_1";
        public $attribut_2 = "value_2";
    }
    /** ... **/
}

$unComplexe = new UnComplexify();
echo $unComplexe->attribut_1; // value_1
echo $unComplexe->attribut_2; // value_2

La sensibilité du typage

Une méthode peut prendre plusieurs types de paramètre, il est désormais possible de l'exprimer lors de l'appel. Les types d'union sont spécifiés en utilisant la syntaxe T1|T2|... et peuvent être utilisés dans toutes les positions où les types sont actuellement acceptés.

<?php
function types ( int|float $number ) : int|bool { /** ... **/ }

De nouvelles fonctions native

str_contains()

str_contains vérifie si une chaîne est contenue dans une autre chaîne et renvoie une valeur booléenne (vrai/faux) si la chaîne a été trouvée ou non.

str_contains ( string $haystack , string $needle ) : bool

La façon typique de vérifier si une chaîne de caractères est contenue dans une autre est généralement faite en utilisant les fonctions strpos ou strstr. Parce que cette fonction est un cas d'utilisation si commun dans presque tous les projets, elle devrait mériter sa propre fonction dédiée : str_contains.

str_starts_with() & str_ends_with()

str_starts_with vérifie si une chaîne commence par une autre chaîne et renvoie une valeur booléenne (vrai/faux) si c'est le cas.

str_starts_with ( string $haystack , string $needle ) : bool

str_ends_with vérifie si une chaîne se termine par une autre chaîne et renvoie une valeur booléenne (vrai/faux) si c'est le cas.

str_ends_with ( string $haystack , string $needle ) : bool

En général, cette fonctionnalité est réalisée en utilisant des fonctions de chaîne existantes telles que substr, strpos/strrpos, strncmp, ou substr_compare (souvent combinée avec strlen).

La fonctionnalité str_starts_with et str_ends_with est si souvent utilisée que de nombreux frameworks PHP majeurs la supportent, y compris Symfony, Laravel, Yii, FuelPHP, et Phalcon 1).

Vérifier le début et la fin des chaînes de caractères est une tâche très courante qui devrait être facile. L'accomplissement de cette tâche n'est pas facile aujourd'hui et c'est pourquoi de nombreux frameworks ont choisi de l'inclure. C'est également la raison pour laquelle d'autres langages de programmation de haut niveau - aussi divers que JavaScript, Java, Haskell et Matlab - ont implémenté cette fonctionnalité. Vérifier le début et la fin d'une chaîne de caractères ne devrait pas être une tâche qui nécessite de faire appel à un framework PHP ou de développer une fonction potentiellement sous-optimale (ou pire, boguée) en userland.


MarquandT

Ethical Hacker ~ Web Developper ~ File Hosting Provider ~ Crypto Enthusiast ~ Automation Expert Bitcoin donation: 32Uu4NKGnxSPC7UukYXVyRHwbppbQpKVki

1300