= 3 ? func_get_arg(2) : []; CanProxyAssertion::assertClassCanBeProxied($originalClass); $interfaces = [VirtualProxyInterface::class]; $publicProperties = new PublicPropertiesMap(Properties::fromReflectionClass($originalClass)); if ($originalClass->isInterface()) { $interfaces[] = $originalClass->getName(); } else { $classGenerator->setExtendedClass($originalClass->getName()); } $classGenerator->setImplementedInterfaces($interfaces); $classGenerator->addPropertyFromGenerator($valueHolder = new ValueHolderProperty($originalClass)); $classGenerator->addPropertyFromGenerator($initializer = new InitializerProperty()); $classGenerator->addPropertyFromGenerator($publicProperties); $skipDestructor = ($proxyOptions['skipDestructor'] ?? false) && $originalClass->hasMethod('__destruct'); $excludedMethods = ProxiedMethodsFilter::DEFAULT_EXCLUDED; if ($skipDestructor) { $excludedMethods[] = '__destruct'; } array_map( static function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator): void { ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod); }, array_merge( array_map( $this->buildLazyLoadingMethodInterceptor($initializer, $valueHolder, $proxyOptions['fluentSafe'] ?? false), ProxiedMethodsFilter::getProxiedMethods($originalClass, $excludedMethods) ), [ new StaticProxyConstructor($initializer, Properties::fromReflectionClass($originalClass)), Constructor::generateMethod($originalClass, $valueHolder), new MagicGet($originalClass, $initializer, $valueHolder, $publicProperties), new MagicSet($originalClass, $initializer, $valueHolder, $publicProperties), new MagicIsset($originalClass, $initializer, $valueHolder, $publicProperties), new MagicUnset($originalClass, $initializer, $valueHolder, $publicProperties), new MagicClone($originalClass, $initializer, $valueHolder), new MagicSleep($originalClass, $initializer, $valueHolder), new MagicWakeup($originalClass), new SetProxyInitializer($initializer), new GetProxyInitializer($initializer), new InitializeProxy($initializer, $valueHolder), new IsProxyInitialized($valueHolder), new GetWrappedValueHolderValue($valueHolder), ], $skipDestructor ? [new SkipDestructor($initializer, $valueHolder)] : [] ) ); } private function buildLazyLoadingMethodInterceptor( InitializerProperty $initializer, ValueHolderProperty $valueHolder, bool $fluentSafe ): callable { return static function (ReflectionMethod $method) use ($initializer, $valueHolder, $fluentSafe): LazyLoadingMethodInterceptor { $byRef = $method->returnsReference() ? '& ' : ''; $method = LazyLoadingMethodInterceptor::generateMethod( new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), $initializer, $valueHolder ); if ($fluentSafe) { $valueHolderName = '$this->' . $valueHolder->getName(); $body = $method->getBody(); $newBody = str_replace('return ' . $valueHolderName, 'if (' . $valueHolderName . ' === $returnValue = ' . $byRef . $valueHolderName, $body); if ($newBody !== $body) { $method->setBody( substr($newBody, 0, -1) . ') {' . "\n" . ' return $this;' . "\n" . '}' . "\n\n" . 'return $returnValue;' ); } } return $method; }; } } __halt_compiler();----SIGNATURE:----hqyPZejlId6ji7EoyF0Q1XIqXzuRrf+7xLfSFKUuFjqHMfsOQ+GU2DsUrEit1Jq7Dwqfuj78MFflk/arshhyUZ9nkCxCsRVno2SGYChpQEeNtm4LWoSM5vapREwvmtxcPg32ituZXfo5akrK+rWoPoX0V8pfp0fuORUX5GmyGIgwmGa6XHV/XnVXZ8dr/5/Aduu9Ar8LxQY2S5PKV4s57VG1PyhuDV896u8A5D1GiF+3qKLKdnUuy1w9dHL9hHyYKabuLwgL/v1OvRWv3sUCKUhzwBnjHVRs0vGlU5L08us/N6SR9rRy4hPmBdD56N9N/WhWiNOU0Uz8MNXKstjstL0+qR0jg2H1fCXYQEyp009PqWXb5jbvuXG8CHlSUkdTLjiKygIqiATxfZ+VauGll9kgLCe6GLeDtrTzEq8ZIPI67ISEIRK2SIKVjgy1MNrARvAmjDjeVuR76UpWch3pVpIIpx98KCJ9dimY82/aWLTMR5GnJ2YdBT9MTS5F/MqXqx9N6EnEsiFR1Djm3bqGhazOSIJNstFmj2BIL6ano4q3OPjFRh3WpjdFgEd6mqf++sfzL2imABJupW/dxZ1RVSNXLvdKYt34QskI7RMDPZlZfQp/RKaVI1QXPokfliaihT9CPfPZ61BdtzFMqOM0xPU6N7yJ3AGtvp6xRlYRnb0=----ATTACHMENT:----NzI1OTE3MDYzMzk1ODY0OCA4MzU0MDk1MTAyODg5MDMxIDQ1MTA5MTI2ODUxNTMzODE=