* * Full license available in separate LICENSE file */ namespace Kadet\Functional\Predicate; use Kadet\Functional\Predicate; class AnyOfPredicate extends AbstractPredicate { /** * Array of predicates to check if all are satisfied. * @var \Kadet\Functional\Predicate[] */ private $predicates = []; public function __construct(Predicate ...$predicates) { $this->predicates = $predicates; } public function or(...$predicate): Predicate { $predicate = array_merge($this->predicates, $predicate); return parent::or($predicate); } public function __invoke(...$args): bool { foreach ($this->predicates as $predicate) { if ($predicate(...$args)) { return true; } } return false; } }