0

まず第一に、許可に 2 進数と 2 の累乗を使用する人がいる理由がわかりません。後方関係から1/0でtrue/falseを表しているからでしょうか?

例: 1010 means false, true, false, true?

私の質問は次のとおりです。10 進数は215進数と同じですが、次のようになります。1111

DEFINE ('READ',1);
DEFINE ('WRITE',2);
DEFINE ('EDIT',4);
DEFINE ('DELETE',8);

$current = 15;

if ($current & READ) print("can read <br />");
if ($current & WRITE) print("can write <br />");
if ($current & EDIT) print("can edit <br />");
if ($current & DELETE) print("can delete <br />");

これは、予想どおり、すべての権限が許可されていることを出力します。ただし、15 を変更すると1111、4 つすべてではなく 3 つだけが許可されていることが表示されます (delete許可は無効になります)。

DEFINE ('READ',1);
DEFINE ('WRITE',2);
DEFINE ('EDIT',4);
DEFINE ('DELETE',8);

$current = 1111;

if ($current & READ) print("can read <br />");
if ($current & WRITE) print("can write <br />");
if ($current & EDIT) print("can edit <br />");
if ($current & DELETE) print("can delete <br />");

おかしくないですか?私はそれを間違って理解していますか?これを理解するには助けが必要です。アクセス許可を 10 進数または 2 進数として db に格納する必要がありますか?

4

1 に答える 1

1

@mensiと@datasageがコメントで述べているように、1111は2進数の1111ではなく、10進数の1111です。パーミッションをバイナリに入れたい場合(たとえば、読みやすくするため)、bindecを使用できます。

$current = bindec('1111'); //Is the same as $current = 15;
于 2013-03-07T17:22:01.760 に答える