2017-10-04 45 views
2

J'essaie de comprendre comment php possède cet exemple.Comment exactement php vérifie les valeurs booléennes entre parenthèses

(\Auth::check() || \Auth::user()->isAdmin()) 
(\Auth::check() && \Auth::user()->isAdmin()) 

\ chèque de Auth() ne donne que vrai ou faux alors que \ Auth :: utilisateur() - fonction> isAdmin() peut donner vrai, faux ou objet utilisateur peut être nul et isAdmin() donne l'erreur . Quand j'exécute (\ Auth :: check() || \ Auth :: user() -> isAdmin()), il me donne une erreur car \ Auth :: check() est false et \ Auth :: user() est nul, mais quand je remplace || avec & & c'est ok bien que l'objet utilisateur still null et la fonction isAdmin doivent donner une erreur.

P.S. Désolé pour la question vague (je ne sais pas quoi faire s'il y a besoin de changer de question mais il y a déjà des réponses) Quelques précisions: Je suspecte que quand il y a & & et php vérifie le premier argument et il est faux alors php ne vérifie jamais les autres. Ai-je raison? Je pense que dans mon cas (faux & & valeurs NULL> méthode) donne simplement faux, mais (false || valeurs NULL> méthode) donne l'erreur en raison de valeurs NULL> méthode

Répondre

0

Je viens de tester dans la pratique et la figure it out:

$a = null 
dd(false && $a->func()); 

et il retourne faux, mais il essayé dd(false || $a->func()); et cette erreur de retour: Undefined variable: null

Ainsi, en cas & & si le premier argument est faux php ne vérifie pas les autres arguments même s'il n'est pas booléen (dans mon cas $ a-> func())

0

I suspect that when there is && php check only first argument and drop other. Am I right?

-Pas. $ a & & $ b TRUE si $ a et $ b sont tous deux TRUE.

2

Vous pouvez lire sur les opérateurs logiques ici: http://php.net/manual/en/language.operators.logical.php

|| est opérateur OR, si le côté gauche ou à droite sont vraies, la condition passera. Le côté gauche de l'opérateur est testé en premier puis le côté droit

&& est l'opérateur AND, si le côté gauche et le côté droit sont vrais, la condition passera. Le côté gauche est exécuté en premier puis le côté droit. Si le côté gauche est faux, le côté droit n'est jamais évalué.

0

Encore une chose. true && null entraînera une évaluation nulle dans un contexte booléen comme faux avec l'expression évaluant globalement comme faux; voir: premier tableau de comparaison here.

Exemple:

<?php 

var_dump(true && null); 

live code.

logique && est un opérateur binaire et quand une expression à l'aide de cet opérateur évalue seulement l'un des deux résultats possibles sont possibles, i.e. vrai ou faux.