當我抓住當前用戶(誰是經理),像這樣:試圖通過用戶輸入一個條件laravel
$user = Auth::user()->user_role;
我再死和轉儲這樣的:
dd($user);
這顯示
string(7) "Manager"
然後我想使用條件來檢查它是否是一個特定的用戶:
dd($user == ("Admin" || "Superuser"));
這(出於某種原因)返回true:
bool(true)
有什麼問題嗎?
當我抓住當前用戶(誰是經理),像這樣:試圖通過用戶輸入一個條件laravel
$user = Auth::user()->user_role;
我再死和轉儲這樣的:
dd($user);
這顯示
string(7) "Manager"
然後我想使用條件來檢查它是否是一個特定的用戶:
dd($user == ("Admin" || "Superuser"));
這(出於某種原因)返回true:
bool(true)
有什麼問題嗎?
應該寫成...
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
不是''
或'0'
,它也轉換爲true
。
所以最後就變成這樣:
dd(true === true);
猜猜是什麼結果呢? )
您是否嘗試過使用類型比較(===
vs ==
)或者可能只是:dd(in_array($user, array("Admin", "Superuser")));
?
你在做什麼基本上是「$用戶不是空的,也不是‘管理員’或‘超級用戶’」
("Admin" || "Superuser")
首先(括號評價),並且等於true
。你真正想要的可能是:
dd($user == "Admin" || $user == "Superuser");