L'opérateur Nullsafe (? ->) convient aux scénarios où une variable ne sait pas si elle est nul mais nécessite l'accès à ses propriétés ou méthodes, et convient particulièrement à la gestion des structures d'objets imbriquées. 1. Il peut simplifier le code et éviter de longues vérifications nulles, telles que le remplacement des jugements si les jugements à plusieurs couches par une ligne de code; 2. Il peut être utilisé conjointement avec l'opérateur de fusion NULL (??) pour fournir des valeurs par défaut pour le résultat final; 3. Il ne peut pas être utilisé pour les appels de type non-objet ou de méthode statique, sinon une erreur sera augmentée. Par exemple: $ city = $ utilisateur? -> getAddress ()? -> getCity () ?? 'Inconnu'; Tout lien intermédiaire est nul et aucune exception n'est lancée.
PHP 8 présente l'opérateur Nullsafe ( ?->
), qui résout le problème d'erreur qu'un objet peut être null
lors de l'accès aux propriétés d'objet ou aux méthodes d'appel. L'utilisation de cet opérateur peut rendre le code plus concis et s?r, en particulier lorsqu'il s'agit de structures d'objets imbriquées.
Quand dois-je utiliser l'opérateur Nullsafe?
Lorsque vous ne savez pas si une variable est null
, mais que vous souhaitez accéder à ses propriétés ou appeler ses méthodes, vous pouvez envisager d'utiliser ?->
. Ceci est particulièrement utile lors de l'accès à des données d'objets profondément imbriquées, telles que l'extraction d'informations à partir de données renvoyées par l'API.
Par exemple:
Vous avez un $user
, qui peut avoir des informations d'adresse $user->getAddress()
, et l'objet d'adresse peut avoir le nom de la ville $address->getCity()
. Si l'un des liens est null
, une erreur se produira lorsque l'utilisation ->
Les appels sont directement utilisés.
Vous pouvez écrire ceci en ce moment:
$ city = $ utilisateur? -> getAddress ()? -> getCity ();
Si l'une des étapes du milieu est null
, l'expression entière retournera null
et aucune erreur ne sera lancée.
Comment utiliser Nullsafe pour simplifier le code de manière réaliste?
évitez les longues vérifications nulles
Dans le passé, vous devrez peut-être l'écrire comme ceci:if ($ user! == null && $ user-> getAddress ()! == null) { $ city = $ user-> getAddress () -> getCity (); } autre { $ city = null; }
Maintenant, une seule ligne est nécessaire:
$ city = $ utilisateur? -> getAddress ()? -> getCity ();
Cela fonctionne mieux avec l'opérateur de fusion nul
Si vous souhaitez donner des valeurs par défaut, vous pouvez les combiner avec??
:$ city = $ utilisateur? -> getAddress ()? -> getCity () ?? 'Inconnu';
De cette fa?on, même si le résultat final est
null
, une alternative peut être fournie.
Dans quelles situations, l'opérateur nullsafe ne peut pas être utilisé?
Bien qu'il soit facile à utiliser, il existe plusieurs restrictions auxquelles faire attention:
Non utilisé pour les méthodes non objets ou non définies
Si vous essayez d'appeler une méthode qui n'est pas la variable d'un objet, une erreur sera toujours signalée. Par exemple:$ valeur = null; $ result = $ valeur? -> SomeMethod (); // Aucune erreur n'est signalée, retourne null
Mais si
$value
est un entier ou un autre type, par exemple:$ valeur = 123; $ result = $ valeur? -> SomeMethod (); // Erreur fatale: erreur non revêtue: appel à une fonction membre SomeMethod () sur int
Assurez-vous donc que la variable que vous utilisez
?->
est en effet un objet ou peut êtrenull
.Non disponible pour les appels de méthode statique
Les méthodes statiques doivent être appelées par le nom de la classe, pas les instances d'objet, donc la méthode d'écriture suivante est illégale:ClassName? :: staticMethod (); // Erreur de syntaxe
Fondamentalement, c'est tout. L'opérateur Nullsafe est un gadget pratique qui peut vous aider à réduire beaucoup de code de jugement défensif. Faites simplement attention aux scénarios qu'il s'applique pour écrire un code PHP plus propre et plus s?r.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

NAMBALLAGES INSIMPHP8ALLOWPASSINGVALUESTOAFONCTIONNEURSPECIFICATIONS THEPARAMETERNAMEDSEADOFRELYINGORAMETERORDORDORDORDR

TheStaticreTurnTypeInphp8MeanThemethoDisexPectedToreRurnanInstanceoftheClassit'sCalledon, y comprisanychildClass.1.EtenablesLaStaticBinding, assuranttheredvalueMatchestheLlingClass'Stype..com.ParedToselEl

Jitinphp8 improveSperformanceBy compilantfrementexecutedcodeintomachinecoatTrutime.insteadoferpretingOpcodeachtime, jitidentieShototsectionofcode, compiltesthentonativemachinecode, cachesitforreuse, andrecestreptureveread.ithelpostimosti

ConstructorPropertyPromotionInphp8AllowsAutomaticCreationandAsssignmentofClassproperties est en train de dire de la construction de l'apprustaire.InSteadofMumberyAssigingAproperTropertyInTeTheConstructor, DeveloperscanAddanAccessModifier (public, protégé, orprié) Totheparam

Le type mixte de PHP8 permet des variables, des paramètres ou des valeurs de retour pour accepter tout type. 1. Le mixtes convient aux scénarios qui nécessitent une forte flexibilité, tels que le middleware, le traitement dynamique des données et l'intégration du code hérité; 2. Il est différent des types d'union car il couvre tous les types possibles, y compris les nouveaux types à l'avenir; 3. Soyez prudent lorsque vous les utilisez pour éviter d'affaiblir la sécurité des types, et il est recommandé d'expliquer les types attendus en conjonction avec PHPDOC. L'utilisation rationnelle de mixtes peut améliorer les capacités d'expression du code tout en conservant les avantages des invites de type.

L'expression de correspondance de PHP8 fournit une cartographie conditionnelle plus propre par une comparaison stricte. 1. Utilisez une égalité stricte (===) pour éviter la conversion de type; 2. Aucune déclaration de rupture n'est requise pour empêcher la pénétration accidentelle; 3. La valeur de retour directe peut être attribuée aux variables; 4. Prise en charge des résultats de la fusion et du partage de la multi-conditions. Convient pour les scénarios d'entrée et de sortie précis de correspondance et de sortie, tels que le traitement du code d'état HTTP; Pas adapté aux contr?les de portée ou aux comparaisons laches.

L'amélioration des performances de PHP8 provient principalement du compilateur JIT nouvellement introduit et de l'optimisation du moteur Zend, mais les avantages dans les applications réelles varient selon le scénario. 1. Le compilateur JIT compile un peu de code dans le code machine à l'exécution, améliorant considérablement les performances des scripts CLI ou des API à long terme, mais a un effet limité dans les demandes Web de courte durée; 2. Opcache améliore et améliore les fonctions de mise en cache et de préchargement d'Opcode, réduisant les E / S de disque et l'analyse des frais généraux, en particulier pour les cadres tels que Laravel ou Symfony; 3. Optimisations internes multiples telles que les opérations de cha?ne et de réseau plus efficaces, une utilisation de la mémoire plus petite, etc. Bien que chaque amélioration soit faible, elle s'accumule en petites quantités; 4. L'amélioration réelle des performances dépend du scénario d'application, PHP8 peut être rapide 10 dans les taches à forte intensité informatique.

Les attributs PHP8 ajoutent des métadonnées aux éléments de code grace à des méthodes structurées. 1. Ils sont attachés au-dessus des classes, des méthodes, etc. en utilisant la syntaxe # [], telle que # [Route ('/ home')] pour définir les itinéraires; 2. Il est plus s?r que PHPDOC, avec la vérification de type et la vérification du temps de compilation; 3. Les attributs personnalisés doivent définir des classes et s'appliquer, tels que l'utilisation de ReflectionAttribute pour créer des attributs de journal LOGEXECUTION; 4. Couramment utilisé dans les cadres pour gérer le routage, la vérification, la cartographie ORM et d'autres taches, améliorant la lisibilité du code et séparant les configurations logiques; 5. Il est accessible par réflexion, mais une utilisation excessive doit être évitée pour éviter d'affecter la clarté du code.
