Why should I use bitwise/bitmask in PHP?

bit-manipulation, bitmask, php

Solution

Why not just do this...

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 = 5;

if($_ARR_permission & PERMISSION_READ) {
    echo 'Access granted.';
}else {
    echo 'Access denied.';
}

You can also create lots of arbitrary combinations of permissions if you use bits...

$read_only = PERMISSION_READ;
$read_delete = PERMISSION_READ | PERMISSION_DELETE;
$full_rights = PERMISSION_DENIED | PERMISSION_READ | PERMISSION_ADD | PERMISSION_UPDATE | PERMISSION_DELETE;

//manipulating permissions is easy...
$myrights = PERMISSION_READ;
$myrights |= PERMISSION_UPDATE;    // add Update permission to my rights

Problem

I am working on a user-role / permission system in PHP for a script. Below is a code using a bitmask method for permissions that I found on phpbuilder.com. Below that part is a much simpler version w3hich could do basicly the same thing without the bit part. Many people have recommended using bit operators and such for settings and other things in PHP, I have never understood why though. In the code below is there ANY benefit from using the first code instead of the second? ``` <?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.'; } ?> ``` non-bit version ``` <?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.'; } ?> ```

Original source