<?php
class RetriesExceededException extends \Exception {}
class Retry
{
static public function withDelay(callable $fn, $retries, $delay)
{
return self::execute($fn, $retries, $delay);
}
static public function immediately(callable $fn, $retries)
{
return self::execute($fn, $retries);
}
static private function execute(callable $fn, $retries, $delay = null)
{
while ($retries)
{
$retries--;
try
{
return $fn;
}
catch (Exception $e)
{
if ($retries && $delay)
{
//do delay
}
}
}
throw new RetriesExceededException();
}
}
class Test
{
public function exception()
{
throw \Exception();
}
}
$test = new Test();
try
{
Retry::immediately(function() use ($test) { $test->exception(); });
}
catch (Exception $e)
{
var_dump($e);
}
//Retry::withDelay($fn, $retries, $delay);
//Retry::immediately($fn, $retries);
preferences:
55.51 ms | 402 KiB | 5 Q