RBFlags
PHP class and trait for manage / set / check flags (bitwise operations). You can organize flags into groups., (*1)
Requirements
Installing
Flags is available through Packagist via Composer, (*2)
{
"require": {
"rodeob/flags": "0.*"
}
}
Usage
This package include class and trait to use it in yours projects., (*3)
You can use rbFlags\Flags class to extend your class in which you want to use flags., (*4)
class MyClass extends rbFlags\Flags {}
Or you use the rbFlags\traits\Flags trait in your class, (*5)
class MyClass
{
use \rbFlags\traits\Flags;
}
You can also use rbFlags\Flags class as standalone flags class., (*6)
$flags = new rbFlags\Flags();
$flags->setFlags(SOME_FLAG);
if ($flags->isFlagSet(SOME_FLAG) {}
Set flags
Method, (*7)
function setFlags($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)
In class:, (*8)
$this->setFlags(self::SOME_FLAG);
Standalone:, (*9)
$flags = new rbFlags\Flags();
$flags->setFlags(SOME_FLAG);
Check flags
Method:, (*10)
function areFlagsSet($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)
and alias:, (*11)
function isFlagSet($flag, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)
In class:, (*12)
if ($this->areFlagsSet(self::SOME_FLAG)) {}
Standalone:, (*13)
$flags = new rbFlags\Flags();
if ($flags->areFlagsSet(SOME_FLAG)) {}
If you check for multiple flags at once it checks if all flags are set, (*14)
$this->setFlags(self::SOME_FLAG | self::SOME_OTHER_FLAG1);
if ($this->areFlagsSet(self::SOME_FLAG | self::SOME_OTHER_FLAG1)) {} // true
if ($this->areFlagsSet(self::SOME_FLAG | self::SOME_OTHER_FLAG2)) {} // false
Flip flags
Method:, (*15)
function flipFlags($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)
In class:, (*16)
$this->flipFlags(self::SOME_FLAG)
Standalone:, (*17)
$flags = new rbFlags\Flags();
$flags->flipFlags(SOME_FLAG)
Unset flags
Method:, (*18)
function unsetFlags($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)
In class:, (*19)
$this->unsetFlags(self::SOME_FLAG)
Standalone:, (*20)
$flags = new rbFlags\Flags();
$flags->unsetFlags(SOME_FLAG)
Multiple flags
In all methods you can, for flags parameter, use mutiple flags at once., (*21)
$this->setFlags(self::SOME_FLAG | self::SOME_OTHER_FLAG);
if ($this->areFlagsSet(self::SOME_FLAG | self::SOME_OTHER_FLAG)) {}
$this->flipFlags(self::SOME_FLAG | self::SOME_OTHER_FLAG)
$this->unsetFlags(self::SOME_FLAG | self::SOME_OTHER_FLAG)
Flags bag (groups)
All methods accept also flags bag parameter to organize flags into groups. If you omit this parameter default bag (group) is used., (*22)
$this->setFlags(self::SOME_FLAG, 'bagName');
if ($this->areFlagsSet(self::SOME_FLAG, 'bagName')) {}
$this->flipFlags(self::SOME_FLAG, 'bagName')
$this->unsetFlags(self::SOME_FLAG, 'bagName')
Chaining
Methods support chaining., (*23)
$this->setFlags(self::SOME_FLAG)
->flipFlags(self::SOME_FLAG)
->unsetFlags(self::SOME_FLAG);