{{$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:----EHe94PeZFZmAWCcoo0Q8nBHGNPTMAJB3IzhjrS6KSTb7ky70GpHT8+38XQKRr7d2Bdk+1cuYTe6qil0P96FLSChsWJfNYYYVQzZ4SCyqwBBvEFOrgshRtMCOWMsKEDrqqZXbgra9vehZ0ZG38avff8zsH0mlpORHPq/weXA3rAiQR6GGk+4ExBfwgmbqDmwzCZTZTWn1+iRZrTqULvlhYG2oqfqixECtPbTYJ25TMAr7qHnirxtoTnNpPCB6fXy1yQ1vt2YY9z7roe3wz3uu4tI177AoS9xV1gNBuQ0HWFFWkiJmba8RrnsOMjH7NPiEDybOlvE7omiP0K7TpkIa72wTLqELjwJ+lUFaUPdyBmU3YwNizU76B7xrTPO9qCwx+ZEHihwbtVkVxy+mz8Eblff4q8BK0R0eIX7gessxMBshAeC8mQrAl4P5/Plqf+65j65vc6/Ste+YmFpy5mWcp3VcUfL2FBhmX1y69K3hByTSxtF2HLz0jNTUBBrSuL9nhbhGn7JSZb72QyC4mvOz4sg15/eh9uMn4qayJdzn5oRO9YO+1l6zUxYgNm3wvnynPSyshWeByNEkElwS0Ca4KLv+d0147SSZQxeepVn8aRGL2b4ienNHkvjvt4J8CRPEifVnV9y4lTjMxRoM17ioVEPH4DQTJDYtaE1+4yNNJ4c=----ATTACHMENT:----NjQzMTQzMzU4MDU0OTAwOSAzNTAwNTQ5MjA3ODg0NjM5IDQ4MDIwNTE1MzUxNDU0NDc=