0

当我像这样抓住当前用户(谁是经理)时:

$user = Auth::user()->user_role;

然后我死了并转储了这个:

dd($user);

这显示

string(7) "Manager"

然后我想使用条件来检查它是否是特定用户:

dd($user == ("Admin" || "Superuser"));

这(出于某种原因)返回 true:

bool(true)

这里有什么问题?

4

3 回答 3

1

您是否尝试过使用类型比较(===vs ==)或者只是dd(in_array($user, array("Admin", "Superuser")));

你所做的基本上是“$user 不是空的,'admin' 或 'superuser' 也不是”

于 2013-06-04T19:30:51.540 回答
1

应该写成...

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);

猜猜结果如何?)

于 2013-06-04T19:31:28.053 回答
0

("Admin" || "Superuser")

首先评估(括号),并且等于true. 你真正想要的可能是:

dd($user == "Admin" || $user == "Superuser");

于 2013-06-04T19:33:14.677 回答