48 lines
1.0 KiB
PHP
48 lines
1.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Deferred Callable
|
|
* Used from:
|
|
* Slim Framework (https://slimframework.com)
|
|
* @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App;
|
|
|
|
use Slim\Interfaces\CallableResolverInterface;
|
|
|
|
class DeferredCallable
|
|
{
|
|
/**
|
|
* @var callable|string
|
|
*/
|
|
protected $callable;
|
|
|
|
protected ?CallableResolverInterface $callableResolver;
|
|
|
|
/**
|
|
* @param callable|string $callable
|
|
* @param CallableResolverInterface|null $resolver
|
|
*/
|
|
public function __construct(callable|string $callable, ?CallableResolverInterface $resolver = null)
|
|
{
|
|
$this->callable = $callable;
|
|
$this->callableResolver = $resolver;
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function __invoke(...$args): mixed
|
|
{
|
|
/** @var callable $callable */
|
|
$callable = $this->callable;
|
|
if ($this->callableResolver) {
|
|
$callable = $this->callableResolver->resolve($callable);
|
|
}
|
|
|
|
return $callable(...$args);
|
|
}
|
|
}
|