ali-eltaweel/predkit
最新稳定版本:1.0.0
Composer 安装命令:
composer require ali-eltaweel/predkit
包简介
A collection of composable predicate classes for PHP, allowing flexible combination of conditions using binary operations such as AND, OR, and more.
README 文档
README
Composable predicate classes for PHP, allowing flexible combination of conditions using binary operations.
Installation
Install predkit via Composer:
composer require ali-eltaweel/predkit
Usage
Creating predicates
By extending the Predicate class
use Predkit\Predicate; class IsEven extends Predicate { public function test(mixed $number): bool { return $number % 2 === 0; } } $predicate = new IsEven();
By speciying a callable
use Predkit\Predicate; $predicate = Predicate::fromCallable(function (mixed $number): bool { return $number % 2 === 0; });
Using predicates
$predicate->test(4); // true $predicate->test(5); // false $evenNumbers = array_filter([1, 2, 3, 4, 5], $predicate); // [2, 4]
Combining predicates
Predicates can be combined using binary operations. The result is a new predicate that represents the combination of the original predicates.
use Predkit\Predicate; $evenPredicate = Predicate::fromCallable(function (mixed $number): bool { return $number % 2 === 0; }); $greaterThanFivePredicate = Predicate::fromCallable(function (mixed $number): bool { return $number > 5; }); // and $evenAndGreaterThanFivePredicate = $evenPredicate->and($greaterThanFivePredicate); array_filter(range(0, 10), $evenAndGreaterThanFivePredicate); // [6, 8, 10] // or $evenOrGreaterThanFivePredicate = $evenPredicate->or($greaterThanFivePredicate); array_filter(range(0, 10), $evenOrGreaterThanFivePredicate); // [0, 2, 4, 6, 7, 8, 9, 10] // not $oddPredicate = $evenPredicate->not(); array_filter(range(0, 10), $oddPredicate); // [1, 3, 5, 7, 9] // nand $evenNandGreaterThanFivePredicate = $evenPredicate->nand($greaterThanFivePredicate); array_filter(range(0, 10), $evenNandGreaterThanFivePredicate); // [0, 1, 2, 3, 4, 5, 7, 9] // nor $evenNorGreaterThanFivePredicate = $evenPredicate->nor($greaterThanFivePredicate); array_filter(range(0, 10), $evenNorGreaterThanFivePredicate); // [1, 3, 5] // xor $evenXorGreaterThanFivePredicate = $evenPredicate->xor($greaterThanFivePredicate); array_filter(range(0, 10), $evenXorGreaterThanFivePredicate); // [ 0, 2, 4, 7, 9 ] // xnor $evenXnorGreaterThanFivePredicate = $evenPredicate->xnor($greaterThanFivePredicate); array_filter(range(0, 10), $evenXnorGreaterThanFivePredicate); // [ 1, 3, 5, 6, 8, 10 ]
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2025-06-15