{{$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:----LRN0Vey8/0uL5jdJZynVtA+eSSsACR6qvQFRy7F/rO8wivDqk9qr8dLnEKLnI+p2xKO38Df1iokezmjTlMi1GLaWJibNfdNmAT8eFdRF+MwOAJaD5bGVUbOhKFEOf/9DUUIZNyMoTvxwQwGTJmZtQqgOz6eTjE5RKMYFG6nRukM8GQY2CvYGLO9QXdPLQ/+ahNnCkI8amVwRSeqFX0fIFL9ztR75si/iUYBeAKiV1Qxste3KvOUcSjBhuyVihj+17WXYSjvgFGMoaunNzEuKOihn05eY2D9xjoWvwwcc4FPXF3DcGvFBOAEOBHUlXV1GrLnNPyWTIvKHeqflbLtz4P0YUirFqQ6yNJ952IN/sEoGOznehC9SJ9hPkaLpeaV0T9qezoSKrpPqKH+xJVEenCQn81yETRM5uUWMVrmAo1iPdpoOM009yA0d/sQnA4VAu/462JyERbnXINSUkr1tNE54GhnJysgNbEkYimzC1fcbiHUi6sKR3Ij8F+lEnQo2Um7K8XZimEW8QqsLTAHW8YVFO21c3HHtNo01gGeo81cUnOHZrTeG9u1OuSp4fsSiC+fed7/zITq86TZzj72K91/RzsH1wxjsieuAjQqRb9p5GFQwLezsr/G0EcWb0IsQY0b6KGOOdWwZwZVELYTFHGg7eBfgNoW6SzR/0ggMLYg=----ATTACHMENT:----MjM1NDAyNjUyNzQyMjczNyAyMDU2MjA3MjU3NDMwMTIgMTUyNTUxNjE2ODI5NjAzMA==