rodeob/flags

Flags manager

v0.1.2 2016-05-19 08:34 UTC

This package is not auto-updated.

Last update: 2024-04-09 20:03:19 UTC


README

PHP class and trait for manage / set / check flags (bitwise operations). You can organize flags into groups.

Requirements

  • PHP 5.5+

Installing

Flags is available through Packagist via Composer

{
    "require": {
        "rodeob/flags": "0.*"
    }
}

Usage

This package include class and trait to use it in yours projects.

You can use rbFlags\Flags class to extend your class in which you want to use flags.

class MyClass extends rbFlags\Flags {}

Or you use the rbFlags\traits\Flags trait in your class

class MyClass
{
    use \rbFlags\traits\Flags;
}

You can also use rbFlags\Flags class as standalone flags class.

$flags = new rbFlags\Flags();
$flags->setFlags(SOME_FLAG);
if ($flags->isFlagSet(SOME_FLAG) {}

Set flags

Method

function setFlags($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)

In class:

$this->setFlags(self::SOME_FLAG);

Standalone:

$flags = new rbFlags\Flags();
$flags->setFlags(SOME_FLAG);

Check flags

Method:

function areFlagsSet($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)

and alias:

function isFlagSet($flag, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)

In class:

if ($this->areFlagsSet(self::SOME_FLAG)) {}

Standalone:

$flags = new rbFlags\Flags();
if ($flags->areFlagsSet(SOME_FLAG)) {}

If you check for multiple flags at once it checks if all flags are set

$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:

function flipFlags($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)

In class:

$this->flipFlags(self::SOME_FLAG)

Standalone:

$flags = new rbFlags\Flags();
$flags->flipFlags(SOME_FLAG)

Unset flags

Method:

function unsetFlags($flags, $bag = FlagsClass::RBFLAGS_DEFAULT_BAG)

In class:

$this->unsetFlags(self::SOME_FLAG)

Standalone:

$flags = new rbFlags\Flags();
$flags->unsetFlags(SOME_FLAG)

Multiple flags

In all methods you can, for flags parameter, use mutiple flags at once.

$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.

$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.

$this->setFlags(self::SOME_FLAG)
    ->flipFlags(self::SOME_FLAG)
    ->unsetFlags(self::SOME_FLAG);