当我像这样抓住当前用户(谁是经理)时:
$user = Auth::user()->user_role;
然后我死了并转储了这个:
dd($user);
这显示
string(7) "Manager"
然后我想使用条件来检查它是否是特定用户:
dd($user == ("Admin" || "Superuser"));
这(出于某种原因)返回 true:
bool(true)
这里有什么问题?
当我像这样抓住当前用户(谁是经理)时:
$user = Auth::user()->user_role;
然后我死了并转储了这个:
dd($user);
这显示
string(7) "Manager"
然后我想使用条件来检查它是否是特定用户:
dd($user == ("Admin" || "Superuser"));
这(出于某种原因)返回 true:
bool(true)
这里有什么问题?
您是否尝试过使用类型比较(===
vs ==
)或者只是dd(in_array($user, array("Admin", "Superuser")));
:
你所做的基本上是“$user 不是空的,'admin' 或 'superuser' 也不是”
应该写成...
dd($user === "Admin" || $user === "Superuser");
... 反而。有两个单独的条件应单独检查。
至于目前的情况,这……很有趣。看,||
PHP 中的运算符不像 JavaScript 中那样工作(它返回第一个操作数,如果它计算为truthy
值,或者返回第二个操作数而不改变它们的类型)。
但它是 PHP,这里||
操作的结果总是一个boolean
值 - 要么true
要么false
。在这种情况下并不奇怪,true
因为在 PHP 中只考虑了两个字符串值falsy
- 一个空字符串和'0'
. 的第一个操作数'Admin' || 'Superuser'
既不是,所以这个表达式的计算结果为true
。
于是就变成了...
dd($user == true);
同样,使用适当的比较运算符===
- 你应该已经注意到这里的区别。但它是==
, 所以它在实际比较它们之前转换其操作数的类型。
根据类型强制的规则(在docpage中有很好的描述),当比较的一个值是boolean
时,另一个总是被转换为boolean
。由于$user
不是''
or '0'
,它也被转换为true
。
所以最终变成了这样:
dd(true === true);
猜猜结果如何?)
("Admin" || "Superuser")
首先评估(括号),并且等于true
. 你真正想要的可能是:
dd($user == "Admin" || $user == "Superuser");