for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Spiral\Core\Config;
/**
* Make a value using a closure.
*/
final class Factory extends Binding
{
use \Spiral\Core\Exception\Traits\ClosureRendererTrait;
Spiral\Core\Exception\Traits\ClosureRendererTrait
$class
Spiral\Core\Config\Factory
public readonly \Closure $factory;
private readonly int $parametersCount;
private ?string $definition;
public function __construct(
callable $callable,
public readonly bool $singleton = false,
) {
$this->factory = $callable(...);
factory
$this->parametersCount = (new \ReflectionFunction($this->factory))->getNumberOfParameters();
parametersCount
/** @psalm-suppress TypeDoesNotContainType */
$this->definition = match (true) {
\is_string($callable) => $callable,
\is_array($callable) => \sprintf(
'%s::%s()',
\is_object($callable[0]) ? $callable[0]::class : $callable[0],
$callable[1],
),
\is_object($callable) && $callable::class !== \Closure::class => 'object ' . $callable::class,
default => null,
};
}
public function __toString(): string
$this->definition ??= $this->renderClosureSignature(new \ReflectionFunction($this->factory));
return \sprintf(
'Factory from %s',
$this->definition,
);
public function getParametersCount(): int
return $this->parametersCount;