1. Go to this page and download the library: Download kariricode/contract library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
kariricode / contract example snippets
use KaririCode\Contract\Resilience\CallNotPermittedException;
use KaririCode\Contract\Resilience\CircuitBreaker;
final readonly class ExchangeRates
{
public function __construct(
private CircuitBreaker $breaker, // kariricode/circuit-breaker, or a test fake
private RatesClient $client,
private LastKnownRates $lastKnown,
) {}
/** @return array<string, float> */
public function current(): array
{
try {
return $this->breaker->execute(fn(): array => $this->client->fetchRates());
} catch (CallNotPermittedException $rejected) {
return $this->lastKnown->rates(); // the client was not called
}
}
}
$permit = $breaker->tryAcquirePermit();
if ($permit === null) {
return $this->skip($stage); // open, or half-open trials in use
}
if (!$limiter->attempt($stage)->allowed) {
$breaker->releasePermit($permit); // admitted, but the call will not run
return $this->throttle($stage);
}
try {
$output = $processor->process($input);
} catch (\Throwable $error) {
$breaker->recordFailure($permit, $error);
throw $error;
}
$breaker->recordSuccess($permit);
final class CircuitOpen extends \RuntimeException implements CallNotPermittedException
{
public function __construct(public readonly ?int $retryAfterSeconds)
{
parent::__construct('Circuit open.');
}
}
use KaririCode\Contract\Environment\EnvironmentResolver;
final readonly class DatabaseSettings
{
public function __construct(private EnvironmentResolver $environment) {}
public function dsn(): string
{
return $this->environment->get('DATABASE_URL') ?? 'sqlite::memory:';
}
}
foreach ($processors as $processor) {
if ($processor->supports($value)) {
$value = $processor->process($value);
}
}
final readonly class QueueConfigProvider implements ConfigProvider
{
public function namespace(): string
{
return 'queue';
}
public function defaults(): array
{
return ['driver' => 'sync', 'workers' => 4];
}
public function schema(): array
{
return ['driver' => 'string', 'workers' => 'int'];
}
}
$context->store(Identity::class, $identity); // authenticator
$identity = $context->find(Identity::class); // any component that decides
$context->clear(); // runtime, end of request
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.