我试图理解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->方法而给出错误
答案 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);
逻辑&&
是一个二元运算符,当使用此运算符的表达式只能评估两个可能结果中的一个时,即true或false。
答案 3 :(得分:0)
我刚刚在实践中进行了测试并弄清楚了:
$a = null
dd(false && $a->func());
然后返回false,然后尝试dd(false || $a->func());
并返回错误:Undefined variable: null
以防万一&amp;&amp;如果第一个参数是假的,那么即使它不是布尔值(在我的例子中是$ a-&gt; func()),也不要检查其他参数