{{$prefixInterceptorsName}}[{{$name}}])) { $returnEarly = false; $prefixReturnValue = $this->{{$prefixInterceptorsName}}[{{$name}}]->__invoke($this, $this->{{$valueHolderName}}, {{$name}}, {{$paramsString}}, $returnEarly); if ($returnEarly) { {{$returnEarlyPrefixExpression}} } } {{$methodBody}} if (isset($this->{{$suffixInterceptorsName}}[{{$name}}])) { $returnEarly = false; $suffixReturnValue = $this->{{$suffixInterceptorsName}}[{{$name}}]->__invoke($this, $this->{{$valueHolderName}}, {{$name}}, {{$paramsString}}, $returnValue, $returnEarly); if ($returnEarly) { {{$returnEarlySuffixExpression}} } } {{$returnExpression}} PHP; /** * @param string $methodBody the body of the previously generated code. * It MUST assign the return value to a variable * `$returnValue` instead of directly returning */ public static function createInterceptedMethodBody( string $methodBody, MethodGenerator $method, PropertyGenerator $valueHolder, PropertyGenerator $prefixInterceptors, PropertyGenerator $suffixInterceptors, ?ReflectionMethod $originalMethod ): string { $name = var_export($method->getName(), true); $valueHolderName = $valueHolder->getName(); $prefixInterceptorsName = $prefixInterceptors->getName(); $suffixInterceptorsName = $suffixInterceptors->getName(); $params = []; foreach ($method->getParameters() as $parameter) { $parameterName = $parameter->getName(); $symbol = $parameter->getPassedByReference() ? '&$' : '$'; $params[] = var_export($parameterName, true) . ' => ' . $symbol . $parameterName; } $paramsString = 'array(' . implode(', ', $params) . ')'; $replacements = [ '{{$prefixInterceptorsName}}' => $prefixInterceptorsName, '{{$name}}' => $name, '{{$valueHolderName}}' => $valueHolderName, '{{$paramsString}}' => $paramsString, '{{$returnEarlyPrefixExpression}}' => ProxiedMethodReturnExpression::generate('$prefixReturnValue', $originalMethod), '{{$methodBody}}' => $methodBody, '{{$suffixInterceptorsName}}' => $suffixInterceptorsName, '{{$returnEarlySuffixExpression}}' => ProxiedMethodReturnExpression::generate('$suffixReturnValue', $originalMethod), '{{$returnExpression}}' => ProxiedMethodReturnExpression::generate('$returnValue', $originalMethod), ]; return str_replace(array_keys($replacements), $replacements, self::TEMPLATE); } } __halt_compiler();----SIGNATURE:----JkXRfiGh4zVnSElpz72EpW541LYyZP9VaBIzowaD1Dq6ZoPW7XnmAojWDBWmb5zNMHYsta+WRZn9LzHrM/rWF+rUKa31wC4zZ2MV1EaAgxUgZdOwArH6+nTo5FD9OSJgI9ooBdnL7OPOjZXw+NKkT7u8iVhu1EJHgQnhv7IEKdP0SmWiGuk1mHAxhyLS8tx7P003yKvxIXeW/U8IICSDuf/1Vf0RFabI+Lz0/B6fCiD3avABXpGJZCxKeyWXyWxhi6a/KBJHnzeueSGfg6xiaEFWma3X2QZTFUbge/MSh/JCLbLPiv8kW/YONJu6r4F0f6US1Tnk4skuJ4PFs7PHapAfv8OM8vFIGqWmsIE8AsipFiDB8A6wdV3NmVafzu+U2y9Bfq/LcawxUY7NjSxjbCc7cUqgQeW2OPHIhd4e+qfHGj1C91Inoq0cqmXqMpVmsnezX6WdsgI+mdQSwm5XAkPviw/kAi0rd93iXOSK4XENimWQ7UVYolXWBEGijfUMIQGtLryCwCdv19lIBujLODzTv667JaeU8GyMUheNRCFIHifEZyGUsVZsaQ+7yAvt0no5/ZxcDEa9oflxRaMRaID18ipJDXdGE+U2+8pjL2mq/fZZoet3nLy5cSH23gJdc8eF9wSnADjmsfErSIZM8a97BV7PSrFjFasYH+lF6c8=----ATTACHMENT:----NDUzMDg0OTgyMTAzMjI2MyAxMDY2NTg1MDk0NDIxMzU0IDg4NDU3NDkwMjI0NDQyMTY=