A tiny PHP library for working with strict sets of boolean flags.
PHP
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
test
.gitattributes
.gitignore
.php_cs
.travis.install
.travis.yml
CHANGELOG.md
CONTRIBUTING.md
LICENSE.md
README.md
composer.json
composer.lock

README.md

Flip

The most recent stable version is 0.2.0 Current build status image Current coverage status image

Flip is a tiny PHP library for working with strict sets of boolean flags.

Defining a flag-set

A flag-set describes the available flags of a given type. Flag-sets are defined by declaring a class that uses the FlagSetTrait trait.

Each property in the class defines a named flag that can be set to true or false. All properties must be private and have a default boolean value.

use Icecave\Flip\FlagSetTrait;

final class ExampleFlags
{
    use FlagSetTrait;

    private $foo = true;
    private $bar = false;
    private $baz = false;
}

Creating a flag-set

The flag-set trait provides the following static methods for quickly creating common sets:

  • defaults() - creates a flag-set where all flags are set to the default values
  • all() - creates a flag-set where all flags are set to true
  • none() - creates a flag-set where all flags are set to false

Flag-sets can also be created and modified using a fluent interface. The example below creates a flag-set with only the bar and baz properties set to true.

$flags = ExampleFlags::none()
    ->bar(true)
    ->baz(true);

Omitting the initial call to defaults(), all() or none() is short-hand for using the defaults. This means that the following two examples are equivalent:

$flags = ExampleFlags::defaults()
    ->foo(false)
    ->bar(true);
$flags = ExampleFlags
    ::foo(false)
    ->bar(true);

Flag-sets are immutable, each call to the fluent interface returns a new instance with the updated flag value.

Flags can not be named "defaults", "all" or "none".

Using a flag-set

Functions that accept flag-sets as parameters can use a type-hint. Flags are read using the regular PHP property notation. Flag values are guaranteed to be a boolean.

function dumpFlags(ExampleFlags $flags)
{
    if ($flags->foo) {
        echo 'Foo is enabled!';
    } else {
        echo 'Foo is disabled!';
    }

    if ($flags->bar) {
        echo 'Bar is enabled!';
    } else {
        echo 'Bar is disabled!';
    }

    if ($flags->baz) {
        echo 'Baz is enabled!';
    } else {
        echo 'Baz is disabled!';
    }
}

It is not possible to set flags using the property notation.

Contact us