<?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 RetriesExceededException();
}
}
class Test
{
public function do()
{
throw \Exception();
}
}
$test = new Test();
try
{
Retry::immediately(function() use ($test) { $test->do(); }, 5);
}
catch (\Exception $e)
{
var_dump($e);
}
echo "bar";
//Retry::withDelay($fn, $retries, $delay);
//Retry::immediately($fn, $retries);
preferences:
36.66 ms | 402 KiB | 5 Q