for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Yiisoft\Definitions;
use ProxyManager\Factory\LazyLoadingValueHolderFactory;
use ProxyManager\Proxy\VirtualProxyInterface;
use Psr\Container\ContainerInterface;
use Yiisoft\Definitions\Contract\DefinitionInterface;
use Yiisoft\Definitions\Helpers\Normalizer;
final class LazyDefinition implements DefinitionInterface
{
/**
* @psalm-param class-string $className
*/
public function __construct(
private mixed $definition,
private string $className,
) {
}
public function resolve(ContainerInterface $container): VirtualProxyInterface
/** @var LazyLoadingValueHolderFactory $factory */
$factory = $container->get(LazyLoadingValueHolderFactory::class);
return $factory->createProxy(
$this->className,
function (&$wrappedObject) use ($container): bool {
$definition = Normalizer::normalize($this->definition, $this->className);
$wrappedObject = $definition->resolve($container);
return true;
);