for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace MaxGoryunov\SavingIterator\Src;
use Closure;
use Iterator;
/**
* Class which checks whether the given iterator is valid and calls consequent
* path if it is true and alternate path otherwise.
* @template T
* @implements Scalar<T>
*/
final class ValidTernary implements Scalar
{
* Ctor.
*
* @template TKey
* @template TValue
* @phpstan-param Iterator<TKey, TValue> $origin
* @phpstan-param Closure(Iterator<TKey, TValue>):T $cons
* @phpstan-param Closure(Iterator<TKey, TValue>):T $alter
* @param Iterator $origin iterator which validity is checked.
* @param Closure $cons consequent path if iterator is valid.
* @param Closure $alter alternative path if iterator is not valid.
public function __construct(
* Iterator which validity is checked.
* @phpstan-var Iterator<TKey, TValue>
* @var Iterator
private Iterator $origin,
* Consequent path if iterator is valid.
* @phpstan-var Closure(Iterator<TKey, TValue>):T
* @var Closure
private Closure $cons,
* Alternate path if iterator is not valid.
private Closure $alter
) {
}
public function value(): mixed
return (
($this->origin->valid()) ?
$this->cons :
$this->alter
)($this->origin);