function LazyProxyTrait::createLazyProxy
Creates a lazy-loading virtual proxy.
Parameters
\Closure():object $initializer Returns the proxied object:
static|null $instance:
File
-
vendor/
symfony/ var-exporter/ LazyProxyTrait.php, line 31
Class
Namespace
Symfony\Component\VarExporterCode
public static function createLazyProxy(\Closure $initializer, ?object $instance = null) : static {
if (self::class !== ($class = $instance ? $instance::class : static::class)) {
$skippedProperties = [
"\x00" . self::class . "\x00lazyObjectState" => true,
];
}
if (!isset(Registry::$defaultProperties[$class])) {
Registry::$classReflectors[$class] ??= new \ReflectionClass($class);
$instance ??= Registry::$classReflectors[$class]->newInstanceWithoutConstructor();
Registry::$defaultProperties[$class] ??= (array) $instance;
Registry::$classResetters[$class] ??= Registry::getClassResetters($class);
if (self::class === $class && \defined($class . '::LAZY_OBJECT_PROPERTY_SCOPES')) {
Hydrator::$propertyScopes[$class] ??= $class::LAZY_OBJECT_PROPERTY_SCOPES;
}
}
else {
$instance ??= Registry::$classReflectors[$class]->newInstanceWithoutConstructor();
}
if (isset($instance->lazyObjectState)) {
$instance->lazyObjectState->initializer = $initializer;
unset($instance->lazyObjectState->realInstance);
return $instance;
}
$instance->lazyObjectState = new LazyObjectState($initializer);
foreach (Registry::$classResetters[$class] as $reset) {
$reset($instance, $skippedProperties ??= []);
}
return $instance;
}