/fluidity

Tools for creating fluent interfaces in PHP

Primary LanguagePHPMIT LicenseMIT

Fluidity

PHP from Packagist Latest Version Total Downloads GitHub Workflow Status PHPStan License

Tools for creating fluent interfaces.

Fluidity provides a set of middleware interfaces that aid in the development of libraries that themselves aim to provide fluid interfaces.

Get news and updates on the DecodeLabs blog.


Installation

Install via Composer:

composer require decodelabs/fluidity

Usage

Method chaining

namespace DecodeLabs\Fluidity;

interface Then
{
    public function then(callable $callback): Then;
    public function thenEach(iterable $values, callable $callback): Then;
    public function thenIf(?bool $truth, callable $yes, callable $no=null): Then;
    public function thenUnless(?bool $truth, callable $no, callable $yes=null): Then;
}

Create fluent object interfaces with basic generic logic structure support.

use DecodeLabs\Fluidity\Then;
use DecodeLabs\Fluidity\ThenTrait;

$test = new class() implements Then {
    use ThenTrait;

    public function doThing(int $value=null) {}
};

$truth = true;

$test
    ->then(function($test) {
        $test->doThing();
    })

    ->thenEach([1, 2, 3], function($test, $value) {
        // Called three times
        $test->doThing($value);
    })

    ->thenIf($truth, function($test) {
        // This gets called if($truth)
    }, function($test) {
        // This get called otherwise
    })

    ->thenUnless($truth, function($test) {
        // This gets called if(!$truth)
    }, function($test) {
        // This get called otherwise
    });

Licensing

Fluidity is licensed under the MIT License. See LICENSE for the full license text.