1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
<?php
namespace Slim;
use Closure;
use Psr\Container\ContainerInterface;
class DeferredCallable
{
use CallableResolverAwareTrait;
private $callable;
private $container;
public function __construct($callable, ContainerInterface $container = null)
{
$this->callable = $callable;
$this->container = $container;
}
public function __invoke()
{
$callable = $this->resolveCallable($this->callable);
if ($callable instanceof Closure) {
$callable = $callable->bindTo($this->container);
}
$args = func_get_args();
return call_user_func_array($callable, $args);
}
}