什么“|";角色做


What "|" character do?

可能重复:
参考-这个符号在PHP中是什么意思?

为了找到答案,我在谷歌上搜索了很多,但一个也找不到。我在一些免费源代码中看到,它们使用"|"符号来组合值或其他东西。有人能解释"|"answers"+"之间的区别吗?

示例:

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

它是按位或运算符,所以您使用的是以2为基数的数字表示法。

例如:

1000|0001=1001===(8|1=9(

http://www.php.net/manual/en/language.operators.bitwise.php

在您的代码中,每个权限都由不同位置的一位表示,我的意思是:

1=0.001=置换1
2=0010=perm2
4=0100=置换3
8=1000=perm4

因此,使用或使用这些数字可以获得具有所有权限的数字。然后,如果你想检查是否设置了权限,你必须用你正在检查的权限执行和操作,例如:

$user_perms = perm1 | perm3;
if ($user_perms & perm4) echo "user does not have this permission";

好吧,这是有区别的。为了看到差异,你可以看看这些数字是如何以二进制形式出现的:

0 =  00000000
1 =  00000001
2 =  00000010
4 =  00000100
8 =  00001000

正如你所看到的,这些数字中的每一个都只有一个位,每个位在不同的位置。

现在,在它们之间进行逐位"或"运算将得到每个位置上有一个作为操作数的结果:

00000010 |
00000100
----------
00000110

在这种情况下,这与添加数字是一样的。

0 | 0 = 0; 0 + 0 = 0
0 | 1 = 1 | 0 = 1 + 0 = 1

区别在于:

1 | 1 = 1

1 + 1 = 10 !!

这个例子的不同之处在于,逐位运算符更快,因为您只需对位进行运算。

|逐位OR(结果的每一位都是1,当输入中至少有一个对应位是1时(。使用加法也可以,但不能清楚地表明是在组装位掩码,并且可能会导致错误,因为

PERMISSION_READ + PERMISSION_READ != PERMISSION_READ

但是

PERMISSION_READ | PERMISSION_READ == PERMISSION_READ

这是一个按位OR运算符。

您可以在此处找到有关它的更多信息:http://php.net/manual/en/language.operators.bitwise.php

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