Tag: PHP v5.0+
Driven crazy with all the flags being constantly added to your tables? Migrations files stacked higher than the *other* Jeff Madsen's poker chips at a championship game? Have no fear!
The Mahana Bitfield Library is a simple and useful library. Using Bitfield Masking we can condense up to 31 separate flags to a single integer setting in much the same way that Unix permission are used.
The READ.ME explains the setup, but in short, you 1) created a new class that inherits from MahanaBitfield abstract class, 2) set up the flags you want in your new class, 3) there is no three - you just use it now.
So given a set of flags such as:
public $flags = [ 'flag1' => 0, 'flag2' => 1, 'flag3' => 2, ];
You can set each one to true or false. The bitmasking calculates a unique value for that particular arrangement. Each flag's `value` is double the preceding one, and all the "true" settings are added up.
$settings = [ 'flag1' => true, 'flag2' => false, 'flag3' => true, ]; // 1 + 0 + 4 = 5 $settings = [ 'flag1' => false, 'flag2' => true, 'flag3' => true, ]; // 0 + 2 + 4 = 6
Those values are not anything you even have to worry about - it is all calculated internally. If you need to get or set a particular flag, use:
$user_settings->flag1 = true; // or $flag1 = $user_settings->flag1
The array methods `getFlags` and `setFlags` were made to allow you to easily pass values back and forth from your forms.
Special thanks to Dan Cowell whose suggestions greatly improved the usability.
Hope that helps!