为什么我应该在 PHP 中使用 bitwise/bitmask?
2022-08-30 21:29:07
我正在为脚本在PHP中处理用户角色/权限系统。
下面是一个使用位掩码方法的代码,用于我在 phpbuilder.com 上找到的权限。
在那部分下面是一个更简单的版本w3hich,可以在没有位部分的情况下做基本上同样的事情。
许多人建议在PHP中使用位运算符等设置和其他内容,但我一直不明白为什么。在下面的代码中,使用第一个代码而不是第二个代码有什么好处吗?
<?php
/**
* Correct the variables stored in array.
* @param integer $mask Integer of the bit
* @return array
*/
function bitMask($mask = 0) {
$return = array();
while ($mask > 0) {
for($i = 0, $n = 0; $i <= $mask; $i = 1 * pow(2, $n), $n++) {
$end = $i;
}
$return[] = $end;
$mask = $mask - $end;
}
sort($return);
return $return;
}
define('PERMISSION_DENIED', 0);
define('PERMISSION_READ', 1);
define('PERMISSION_ADD', 2);
define('PERMISSION_UPDATE', 4);
define('PERMISSION_DELETE', 8);
//run function
// this value would be pulled from a user's setting mysql table
$_ARR_permission = bitMask('5');
if(in_array(PERMISSION_READ, $_ARR_permission)) {
echo 'Access granted.';
}else {
echo 'Access denied.';
}
?>
非位版本
<?PHP
/*
NON bitwise method
*/
// this value would be pulled from a user's setting mysql table
$user_permission_level = 4;
if($user_permission_level === 4) {
echo 'Access granted.';
}else {
echo 'Access denied.';
}
?>