functional-php/src/Predicate/AnyOfPredicate.php
2018-02-28 21:37:37 +01:00

45 lines
928 B
PHP

<?php
/**
* Copyright 2018 Kacper Donat
*
* @author Kacper "Kadet" Donat <kacper@kadet.net>
*
* 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;
}
}