decodelabs/tightrope

Reusable constraints for your PHP classes

v0.1.2 2023-09-26 11:33 UTC

This package is auto-updated.

Last update: 2024-11-04 22:01:22 UTC


README

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

Reusable constraints for your PHP classes.

Tightrope is a middleware package that provides library developers with a set of reusable semantic constraints.

Get news and updates on the DecodeLabs blog.

Installation

composer require decodelabs/tightrope

Usage

Tightrope defines a number of reusable interfaces that represent a property of an object, such as being disableable, readable or requirable:

namespace DecodeLabs\Tightrope;

interface Nullable {
    public function isNullable(): bool;
}

It also supplies a manifest version of each interface along with a trait implementation:

namespace DecodeLabs\Tightrope\Manifest;

use DecodeLabs\Tightrope\Nullable as StaticNullable;

interface Nullable extends StaticNullable {
    public function setNullable(bool $flag): static;
}

You can use these interfaces to define properties of your objects:

namespace My\Project;

use DecodeLabs\Exceptional;
use DecodeLabs\Tightrope\Manifest\Nullable;
use DecodeLabs\Tightrope\Manifest\NullableTrait;

class MyClass implements Nullable {

    use NullableTrait;

    public function doSomething(?string $value): void {
        if(
            !$this->isNullable() &&
            $value === null
        ) {
            throw Exceptional::InvalidArgument('Value cannot be null');
        }

        // ...
    }
}

$myObject = new MyClass();

$myObject->setNullable(true);
$myObject->doSomething(null); // Fine

$myObject->setNullable(false);
$myObject->doSomething(null); // Not fine

Available properties

The following interfaces are currently available:

  • Disableable
  • Immutable
  • Nullable
  • Readable
  • ReadOnlyable
  • Requirable
  • Writable

Licensing

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