2017-10-04 31 views
2

我想了解php如何hadles这个例子。究竟如何检查布尔值在括号中

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

\验证::检查()仅给出了或真或假,而\验证::用户() - > isAdmin()可以给真,假或用户对象可以为空,isAdmin()函数给出错误。 (Auth :: check()|| \ Auth :: user() - > isAdmin())它给我错误,因为\ Auth :: check()是false并且\ Auth :: user ()为null,但是当我替换||时与& &没关系,虽然用户对象仍为空,并且isAdmin函数必须给出错误。

P.S.对不起,模糊的问题(我不知道该怎么办,如果有需要改变的问题,但已经有答案)一些澄清: 我怀疑,当有& &和PHP检查第一个参数,它是假的,然后PHP从不检查其他。我对吗?我这样认为,因为在我的情况(假& &空值>方法)只能得到错误的,但是(假||空值>法)给出了错误,因为空值的>方法

回答

0

我只是在实践中检验和看着办吧:

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

,并返回false但随后试图dd(false || $a->func());这回错误:Undefined variable: null

所以,如果& &如果第一个参数是假的PHP不检查其他参数,即使它不是布尔值(在我的情况下$ a-> func())

0

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

-No。 $ a & & $ b如果$ a和$ b都为TRUE,则为TRUE。

2

您可以在这里逻辑运算符念起来:http://php.net/manual/en/language.operators.logical.php

||是或运算,如果左边或右边是真,那么情况将成为过去。首先测试操作员的左侧,然后右侧

&&是AND运算符,如果左侧和右侧为真,条件将通过。左侧先运行,然后右侧运行。如果左侧为假,则从不评估右侧。

0

还有一件事。 true && null将导致布尔上下文中的null评估为false,并将整体评估为false;请参阅:第一个比较表here

实施例:

<?php 

var_dump(true && null); 

live code.

逻辑&&是一个二进制运算符,并且当使用该操作者的表达式计算两个只有一个可能的结果是可能的,即真或假。