我搜索了很多寻找答案,但我找不到任何答案。 我在几个免费的源代码中看到他们使用“|”签署组合价值观或东西。可以有人启发“|”之间有什么不同和“+”?
样品:
<?php
define('PERMISSION_DENIED', 0);
define('PERMISSION_READ', 1);
define('PERMISSION_ADD', 2);
define('PERMISSION_UPDATE', 4);
define('PERMISSION_DELETE', 8);
$read_only = PERMISSION_READ;
$read_delete = PERMISSION_READ | PERMISSION_DELETE;
$full_rights = PERMISSION_DENIED | PERMISSION_READ | PERMISSION_ADD | PERMISSION_UPDATE | PERMISSION_DELETE;
$myrights = PERMISSION_READ;
$myrights |= PERMISSION_UPDATE;
?>
为什么不呢:
<?php
define('PERMISSION_DENIED', 0);
define('PERMISSION_READ', 1);
define('PERMISSION_ADD', 2);
define('PERMISSION_UPDATE', 4);
define('PERMISSION_DELETE', 8);
$read_only = PERMISSION_READ;
$read_delete = PERMISSION_READ + PERMISSION_DELETE;
$full_rights = PERMISSION_DENIED + PERMISSION_READ + PERMISSION_ADD + PERMISSION_UPDATE + PERMISSION_DELETE;
$myrights = PERMISSION_READ;
$myrights += PERMISSION_UPDATE;
?>
答案 0 :(得分:4)
它是按位或运算符,因此您使用基数2表示法编号。
例如:
1000 | 0001 = 1001 ==&gt; (8 | 1 = 9)
http://www.php.net/manual/en/language.operators.bitwise.php
在你的代码中,每个权限都由不同位置的一位表示,我的意思是:
1 = 0001 = perm1
2 = 0010 = perm2
4 = 0100 = perm3
8 = 1000 = perm4
这样做或使用这些数字会为您提供包含所有权限的号码。然后,如果您想检查是否设置了权限,您必须使用您正在检查的权限进行操作,例如:
$user_perms = perm1 | perm3;
if ($user_perms & perm4) echo "user does not have this permission";
答案 1 :(得分:4)
好的,有区别。为了看到差异,您可以看到这些数字如何以二进制形式出现:
0 = 00000000
1 = 00000001
2 = 00000010
4 = 00000100
8 = 00001000
正如您所看到的,这些数字中的每一个在不同的位置都只有一个位设置为一个。
现在,在它们之间进行按位OR将使每个位置上的一个结果作为操作数:
00000010 |
00000100
----------
00000110
在这种情况下,它与添加数字相同。
0 | 0 = 0; 0 + 0 = 0
0 | 1 = 1 | 0 = 1 + 0 = 1
差异来自:
1 | 1 = 1
而
1 + 1 = 10 !!
此示例的不同之处在于逐位运算符更快,因为您只需对位进行操作。
答案 2 :(得分:3)
|
是bitwise OR(如果输入中的至少一个相应位是1,则结果的每一位都是1)。使用添加也可以,但是不清楚是否正在组装一个位掩码,并且可能导致错误,因为
PERMISSION_READ + PERMISSION_READ != PERMISSION_READ
但
PERMISSION_READ | PERMISSION_READ == PERMISSION_READ
答案 3 :(得分:1)
这是一个按位OR运算符。
您可以在此处找到有关它的更多信息:http://php.net/manual/en/language.operators.bitwise.php
按位运算符通常适用于软编码方法