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

How exactly php checks boolean values in parentheses

我正在尝试了解 php 如何处理这些示例。

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

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

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

P.S。很抱歉这个模糊的问题(我不知道如果需要更改问题该怎么办,但已经有答案了)一些澄清: 我怀疑当有 && 并且 php 检查第一个参数并且它是 false 时 php 永远不会检查其他参数。我对吗?我认为是这样,因为在我的情况下 (false && null->method) 只给出 false 但 (false || null->method) 由于 null->method

而给出错误

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

-没有。如果 $a 和 $b 都为真,则 $a && $b 为真。

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

||是OR运算符,如果左边OR右边为真则条件通过。先测试运算符的左侧,再测试右侧

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

还有一件事。 true && null 将导致 null 在布尔上下文中评估为 false,表达式评估总体为 false;见:第一次比较 table here.

示例:

<?php

var_dump( true && null);

live code.

逻辑 && 是二元运算符,当使用此运算符的表达式求值时,只有两种可能结果中的一种是可能的,即真或假。

我刚刚在实践中测试并弄明白了:

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

并且它 return 错误但随后它尝试了 dd(false || $a->func()); 和这个 return 错误:Undefined variable: null

所以如果 && 如果第一个参数为假 php 即使它不是布尔值也不要检查其他参数(在我的例子中 $a->func())