for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Zenstruck\Governator;
/**
* @author Kevin Bond <[email protected]>
*/
final class Counter
{
private int $hits;
private int $resetsAt;
public function __construct(int $hits, int $resetsAt)
$this->hits = $hits;
$this->resetsAt = $resetsAt;
}
public function hits(): int
return $this->hits;
public function resetsAt(): int
$currentTime = time();
return $this->resetsAt < $currentTime ? $currentTime : $this->resetsAt;
public function resetsIn(): int
return \max(0, $this->resetsAt - time());
public function addHit(): self
$clone = clone $this;
++$clone->hits;
return $clone;