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);
逻辑 &&
是二元运算符,当使用此运算符的表达式求值时,只有两种可能结果中的一种是可能的,即真或假。
我刚刚在实践中测试并弄明白了:
$a = null
dd(false && $a->func());
并且它 return 错误但随后它尝试了 dd(false || $a->func());
和这个 return 错误:Undefined variable: null
所以如果 && 如果第一个参数为假 php 即使它不是布尔值也不要检查其他参数(在我的例子中 $a->func())
我正在尝试了解 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);
逻辑 &&
是二元运算符,当使用此运算符的表达式求值时,只有两种可能结果中的一种是可能的,即真或假。
我刚刚在实践中测试并弄明白了:
$a = null
dd(false && $a->func());
并且它 return 错误但随后它尝试了 dd(false || $a->func());
和这个 return 错误:Undefined variable: null
所以如果 && 如果第一个参数为假 php 即使它不是布尔值也不要检查其他参数(在我的例子中 $a->func())