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

... 代わりは。個別に確認する必要がある 2 つの個別の条件があります。

現在の状況については、それは... おかしいです。PHPの||演算子は JavaScript のようには機能しません (truthy値に評価される場合は最初のオペランドを返すか、型を変更せずに 2 番目のオペランドを返します)。

しかし、これは PHP であり、ここでは||操作の結果は常にboolean値 ( または のいずれかtrue)falseです。PHPtrueでは 2 つの文字列値 (falsy空の文字列と'0'. の最初のオペランド'Admin' || 'Superuser'はどちらでもないため、この式は と評価されtrueます。

だからそれは...

dd($user == true);

繰り返しますが、適切な比較演算子を使用===すると、ここで違いに気付くはずです。しかし、それ==は であるため、実際に比較する前にオペランドの型を変換します。

型強制の規則 (docpage で非常にうまく説明されています) により、比較の一方の値が の場合、もう一方の値boolean常にに変換されbooleanます。またはで$userはないので、にも変換されます。'''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 に答える