什么“|”性格呢?

时间:2011-09-30 10:21:53

标签: php

  

可能重复:
  Reference - What does this symbol mean in PHP?

我搜索了很多寻找答案,但我找不到任何答案。 我在几个免费的源代码中看到他们使用“|”签署组合价值观或东西。可以有人启发“|”之间有什么不同和“+”?

样品:

<?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; 
?>

4 个答案:

答案 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

按位运算符通常适用于软编码方法