public function __construct(array
$limiters) { if (!
$limiters) { throw new \
LogicException(sprintf('"%s::%s()" require at least one limiter.', self::
class, __METHOD__
));
} $this->limiters =
$limiters;
} public function reserve(int
$tokens = 1, float
$maxTime = null
): Reservation
{ throw new ReserveNotSupportedException(__CLASS__
);
} public function consume(int
$tokens = 1
): RateLimit
{ $minimalRateLimit = null;
foreach ($this->limiters
as $limiter) { $rateLimit =
$limiter->
consume($tokens);
if (null ===
$minimalRateLimit ||
$rateLimit->
getRemainingTokens() <
$minimalRateLimit->
getRemainingTokens()) { $minimalRateLimit =
$rateLimit;
} }