php如何检查括号中的布尔值

时间:2017-10-04 18:38:56

标签: php logical-operators

我试图理解php如何使这个例子发挥作用。

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

\ Auth :: check()只给出false或true而\ _Teh :: user() - > isAdmin()可以给出true,false或者user对象可以为null,isAdmin()函数给出错误。

当我运行(\ Auth :: check()|| \ Auth :: user() - > isAdmin())时,它给出了错误,因为\ Auth :: check()为false且\ Auth :: user ()为null,但是当我替换||时与&&虽然用户对象仍为null并且isAdmin函数必须给出错误,但它没问题。

P.S。对于模糊的问题感到抱歉(如果需要更改问题,我不知道该怎么做但已经有答案)一些澄清: 我怀疑当有&&和PHP检查第一个参数,它是假的,然后PHP永远不会检查其他。我对吗?我想是的,因为在我的情况下(false&& null->方法)只给出false但是(false || null->方法)因为null->方法而给出错误

4 个答案:

答案 0 :(得分:2)

您可以在此处阅读逻辑运算符:http://php.net/manual/en/language.operators.logical.php

||是OR运算符,如果左或右侧为真,则条件将通过。首先测试操作员的左侧,然后测试右侧

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

答案 1 :(得分:0)

  

我怀疑当有&& php只检查第一个参数并删除   其他。我是对的吗?

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

答案 2 :(得分:0)

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

示例:

<?php

var_dump( true && null);

live code.

逻辑&&是一个二元运算符,当使用此运算符的表达式只能评估两个可能结果中的一个时,即true或false。

答案 3 :(得分:0)

我刚刚在实践中进行了测试并弄清楚了:

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

然后返回false,然后尝试dd(false || $a->func());并返回错误:Undefined variable: null

以防万一&amp;&amp;如果第一个参数是假的,那么即使它不是布尔值(在我的例子中是$ a-&gt; func()),也不要检查其他参数