2013-06-04 21 views
0

當我抓住當前用戶(誰是經理),像這樣:試圖通過用戶輸入一個條件laravel

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

我再死和轉儲這樣的:

dd($user); 

這顯示

string(7) "Manager" 

然後我想使用條件來檢查它是否是一個特定的用戶:

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

這(出於某種原因)返回true:

bool(true) 

有什麼問題嗎?

回答

1

應該寫成...

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

..相反。有兩個單獨的條件應該單獨檢查。

至於目前的情況,這是...有趣。請參見|| PHP中的運算符不像JavaScript中那樣工作(如果它返回值爲truthy值,則返回第一個操作數,或者返回第二個操作數而不更改其類型)。

但它的PHP,這裏||操作的結果是總是一個boolean價值 - 無論是truefalse。在這種情況下,它是true並不奇怪,因爲在PHP中只有兩個字符串值被認爲是falsy - 一個空字符串和'0''Admin' || 'Superuser'的第一個操作數既不是,所以此表達式的計算結果爲true

所以它變得......

dd($user == true); 

再次,適當的比較運算符 - === - 你應該在這裏注意到的差異。但它是==,所以它在實際比較它們之前轉換它的操作數的類型。

由式脅迫(其在docpage很好地描述的)的規則,當比較的一個值是boolean,其它總是被轉換到boolean太。由於$user不是'''0',它也轉換爲true

所以最後就變成這樣:

dd(true === true); 

猜猜是什麼結果呢? )

1

您是否嘗試過使用類型比較(=== vs ==)或者可能只是:dd(in_array($user, array("Admin", "Superuser")));

你在做什麼基本上是「$用戶不是空的,也不是‘管理員’或‘超級用戶’」

0

("Admin" || "Superuser")

首先(括號評價),並且等於true。你真正想要的可能是:

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

相關問題