Counts failures in CLOSED state. After failureThreshold failures, trips to OPEN and rejects all calls instantly. After recoveryTimeout seconds, moves to HALF_OPEN and allows one test call. Success resets to CLOSED.

PHP Code Editor

<?php
/**
* Circuit breaker with three states:
* CLOSED — normal operation, failures counted
* OPEN — all calls rejected immediately (fast fail)
* HALF_OPEN — one test call allowed to check if service recovered
*/
class CircuitBreaker
{
private const CLOSED = 'closed';
private const OPEN = 'open';
private const HALF_OPEN = 'half-open';
private string $state = self::CLOSED;
private int $failureCount = 0;
private float $openedAt = 0;
public function __construct(
private readonly int $failureThreshold = 3,
private readonly float $recoveryTimeout = 5.0, // seconds
) {}
public function call(callable $fn): mixed
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PHP Version

Execution Result

Ready to execute

Click the "Run Script" button to see the output here