PHP 8.4 est enfin là, apportant des changements passionnants qui devraient transformer la façon dont les développeurs travaillent ! Avec chaque nouvelle version, PHP continue de prouver pourquoi il s’agit d’un outil si essentiel dans le paysage actuel du développement Web.
Cet article suppose que vous possédez des connaissances de base du langage de programmation PHP.
Laravel Herd : utilisé pour gérer mes versions PHP et mon serveur Nginx.
PHPStorm : un excellent IDE avec un bon copilote IntelliSense et IA.
Laragon : un environnement de développement local facile à utiliser qui prend en charge PHP et d'autres technologies.
En PHP, la visibilité des propriétés des objets est traditionnellement symétrique. Cela signifie que les opérations get et set pour une propriété doivent partager la même visibilité (publique, privée ou protégée) mais ne peuvent pas différer.
Par exemple, si une propriété est publique, la lecture et l'écriture sont publiques, sans aucun moyen d'autoriser une opération sans l'autre.
En contexte, lorsque vous déclarez une propriété d'une classe publique, elle devient mutable, permettant de la lire et de la modifier depuis l'extérieur de la classe.
Cependant, avec l'avènement de la visibilité asymétrique, vous pouvez désormais définir des étendues distinctes pour les propriétés de lecture et d'écriture.
Cela signifie qu'une propriété peut être lisible dans un contexte et accessible en écriture dans un autre, offrant ainsi un meilleur contrôle sur la façon dont les propriétés sont accessibles et modifiées.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
Nous pouvons rendre une propriété publique et la propriété définie est rendue privée. Cela signifie que la propriété ne peut pas être mise à jour en dehors de la classe, ce qui la rend immuable.
Si vous essayez de modifier la propriété $name, vous obtiendrez une erreur indiquant que vous ne pouvez pas modifier la propriété en raison de la portée de visibilité.
Voici quelques points clés à noter concernant la visibilité asymétrique :
Les espaces ne sont pas autorisés dans la déclaration set-visibility. private(set) est correct. private( set) n'est pas correct et entraînera une erreur d'analyse.
Si une propriété est déclarée publique, la visibilité principale peut être omise. Par exemple, public private(set) et private(set) se comporteront de la même manière, car la visibilité publique est implicite.
Seules les propriétés typées peuvent avoir une visibilité distincte pour les opérations définies. Cela signifie que vous ne pouvez pas appliquer une visibilité asymétrique aux propriétés non typées en PHP.
La visibilité définie doit être identique ou plus restrictive que la visibilité obtenue. Par exemple, public protected(set) et protected protected(set) sont valides, mais protected public(set) entraînera une erreur de syntaxe.
Découvrez-en davantage sur la visibilité de l'asymétrie, y compris d'autres exemples à consulter.
Le Property Hook est une fonctionnalité intéressante de PHP 8.4 qui introduit un moyen pour les développeurs d'ajouter des directives get et set directement à une variable sans créer de manière expressive des méthodes pour lire et écrire dans la variable.
Alternativement, les méthodes magiques __get et __set peuvent être utilisées, mais cela rend le code plus verbeux, peut introduire des erreurs et interrompre les outils d'analyse statique.
On peut dire sans se tromper que la conception et la syntaxe des hooks de propriété sont similaires à celles de Kotlin mais sont principalement influencées par les langages de programmation C# et Swift.
En PHP 8.3, nous pouvons créer une classe avec une propriété dans son constructeur, et cela nous donne la possibilité de lire et d'écrire dans la propriété.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
Le problème avec cette approche est que lorsque nous décidons d'écrire dans la propriété, soit nous utilisons la méthode magique __set, soit nous créons de manière expressive une méthode pour muter la variable, ce qui pourrait provoquer une rupture dans la base de code sur toute la ligne.
Les hooks de propriété permettent aux développeurs de créer immédiatement une directive set après avoir créé la propriété.
class Car { public function __construct(public string $model) { } }
Notez que la valeur transmise à la directive set doit être du même type que la propriété, sinon une erreur sera générée.
Vous pouvez transmettre un autre type à la directive set et le convertir dans le type correct avant d'écrire dans la propriété, comme indiqué ci-dessous :
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
L'exemple ci-dessus montre comment nous pouvons recevoir en toute sécurité une variable de type composé de la directive set et l'analyser selon le type correct défini par la propriété.
Vous pouvez omettre l'argument passé à la directive set s'il est identique au type de propriété. Par exemple, les deux méthodes ci-dessous sont valides et se comportent de la même manière.
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->year= $value; } } }
Notez que l'argument est par défaut $value s'il est omis. Cette syntaxe est courante dans les langages de programmation comme Kotlin et C#.
Avant cette fonctionnalité, accéder aux membres d'une classe en PHP impliquait l'ajout de parenthèses supplémentaires autour de la classe.
// --------------------------METHOD 1---------------------------- public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } // --------------------------METHOD 2---------------------------- public string $model{ set { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } }
Si vous ne mettez pas le nouvel appel Car() entre parenthèses, vous obtiendrez une erreur d'analyse.
La nouvelle syntaxe nous permet d'accéder aux méthodes, propriétés et constantes sans avoir besoin de parenthèses supplémentaires.
class Car { public function getName(){ return "Toyota Camry"; } } $carName = (new Car())->getName();
Pour une description complète de ce changement proposé, consultez les détails dans la RFC.
De nouvelles fonctions d'assistance arrivent dans PHP 8.4.
Certaines de ces fonctions ont déjà leur implémentation dans Laravel Arr ou Collection helpers.
La fonction array_find_key()
La fonction array_find_key($array, $callback) renvoie la clé du premier élément pour lequel la méthode $callback renvoie true. Si aucun élément ne remplit la condition, la fonction renvoie null.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
La fonction array_find()
La fonction array_find_key() est conçue pour rechercher dans un tableau et renvoyer la clé du premier élément qui satisfait une condition définie par une fonction de rappel.
De la même manière que array_find_key(), il renvoie null si aucun élément correspondant n'est trouvé.
class Car { public function __construct(public string $model) { } }
Si aucun fruit du tableau n'avait une quantité supérieure à 10, la fonction renverrait null.
La fonction array_any()
La fonction array_any() détermine si au moins un élément d'un tableau remplit un critère spécifique spécifié par une fonction d'évaluation fournie.
Si au moins un élément remplit la condition, la fonction renvoie vrai ; sinon, il renvoie false.
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
Si aucun nombre dans le tableau n'est supérieur à 10, la fonction retournera false.
La fonction array_all()
La fonction array_all() vérifie si chaque élément d'un tableau réussit un test spécifique. Il applique une règle spéciale (la fonction de rappel) à chaque élément.
Si tous les éléments réussissent le test selon la règle, alors array_all() renvoie true.
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->year= $value; } } }
Dans cet exemple, la fonction array_all() parcourra le tableau $numbers et appliquera la fonction de rappel à chaque élément. Le rappel vérifie si le nombre est divisible par 2 (c'est-à-dire pair).
Puisque tous les nombres du tableau sont pairs, la fonction array_all() renverra true et le message "Tous les nombres sont pairs." sera affiché.
Nous avons examiné les principales améliorations introduites dans PHP 8.4. Ces mises à jour offrent des améliorations précieuses aux développeurs, notamment de nouvelles fonctionnalités puissantes et des gains potentiels d'efficacité.
Pour approfondir toutes les mises à jour, y compris des exemples et des explications détaillées, visitez la page officielle d'annonce de la version PHP 8.4.0.
N'oubliez pas de consulter les dépréciations et les modifications de compatibilité ascendante pour assurer une transition en douceur vers la dernière version.
Si vous avez apprécié l'article, n'oubliez pas de le partager avec les autres.
J'aimerais connaître votre avis : déposez un commentaire ci-dessous et poursuivons la conversation. Acclamations! ?
Suivez-moi pour plus d'articles sur PHP, Node.js, TypeScript et PHP ! Vous pouvez également me trouver sur Twitter ou LinkedIn.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!