= 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:----LE1fmuEpiwJohr937vq+AvrzMmdp9XBT1pTNje/4lRM0B+UAv349DeUUCdBYNViHC9NcBNW8MaYGo66E9SrjKdCdWaqbUU4s+j6vIBIE6WY5N4743uUHhCpg+s3n+apIC3Psyd3bktCVbH7kZi94gLuGPi4wDyVOir1nQgkMC6vROzS/9QjPtW1Uv+dTSwP9vtj8xPaTpwDzmT9fAQcSegzLowKc9papus/WwJ/2E+4OF3vRQI62K3uslJxh0Kn5wF2OGta5FgLDNpehjHAydmH20ZPIxlfG++MpKM5nYvOjwZBUUPlhltF8C5Ih8EKb2MYHztY2X9s3G7Ljo740Hj4pS9GZPlTzK+vVmh5xK0ByrpmibsLMljjiwa6XbDNKz75WqJ+sqgrpQWcNXlgqn0OrpatZq/HzmLx6zWU+7NkxCuJqPjfafMZ6jR/u+ef7z3a/NCz+rmgOJRj5M1KAUeD8HteU+VimBhxtUwogXg9rCaUAa2ul0rxFQM6FwUUmt4R/NpbU0/Y8Tfov3+cbGRVXO0bbGxFZci+swXuwYmY5xWxP5Gph6qOXSrsP4JOMbu6kSPQOZ8WLPiXJg7uRUr17wPVNdzOE6Nzryizf1xkCUoAyJswNJZ8KHVeRQNMoUWRjmMW5mkDI078u4rtallkE54QE6nOMd6avyXWYKFA=----ATTACHMENT:----MjA4NzgzOTk5MjI1NTg3MyA1NTA3MjQ2ODU3NDY4MzEwIDM4MzU3Mjc0ODUzMTUyOA==