Tightrope is a middleware package that provides library developers with a set of reusable semantic constraints.
Get news and updates on the DecodeLabs blog.
composer require decodelabs/tightrope
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
The following interfaces are currently available:
- Disableable
- Immutable
- Nullable
- Readable
- ReadOnlyable
- Requirable
- Writable
Tightrope is licensed under the MIT License. See LICENSE for the full license text.