Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. LazyProxyTrait.php

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

LazyProxyTrait

Namespace

Symfony\Component\VarExporter

Code

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;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal