[ Index ]

PHP Cross Reference of phpBB-3.3.14-deutsch

title

Body

[close]

/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Util/ -> InterceptorGenerator.php (source)

   1  <?php
   2  
   3  declare(strict_types=1);
   4  
   5  namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util;
   6  
   7  use ProxyManager\Generator\MethodGenerator;
   8  use ProxyManager\Generator\Util\ProxiedMethodReturnExpression;
   9  use Zend\Code\Generator\PropertyGenerator;
  10  
  11  /**
  12   * Utility to create pre- and post- method interceptors around a given method body
  13   *
  14   * @author Marco Pivetta <ocramius@gmail.com>
  15   * @license MIT
  16   *
  17   * @private - this class is just here as a small utility for this component, don't use it in your own code
  18   */
  19  class InterceptorGenerator
  20  {
  21      /**
  22       * @param string                                  $methodBody         the body of the previously generated code.
  23       *                                                                    It MUST assign the return value to a variable
  24       *                                                                    `$returnValue` instead of directly returning
  25       * @param \ProxyManager\Generator\MethodGenerator $method
  26       * @param \Zend\Code\Generator\PropertyGenerator  $valueHolder
  27       * @param \Zend\Code\Generator\PropertyGenerator  $prefixInterceptors
  28       * @param \Zend\Code\Generator\PropertyGenerator  $suffixInterceptors
  29       * @param \ReflectionMethod|null                  $originalMethod
  30       */
  31      public static function createInterceptedMethodBody(
  32          string $methodBody,
  33          MethodGenerator $method,
  34          PropertyGenerator $valueHolder,
  35          PropertyGenerator $prefixInterceptors,
  36          PropertyGenerator $suffixInterceptors,
  37          ?\ReflectionMethod $originalMethod
  38      ) : string {
  39          $name                   = var_export($method->getName(), true);
  40          $valueHolderName        = $valueHolder->getName();
  41          $prefixInterceptorsName = $prefixInterceptors->getName();
  42          $suffixInterceptorsName = $suffixInterceptors->getName();
  43          $params                 = [];
  44  
  45          foreach ($method->getParameters() as $parameter) {
  46              $parameterName = $parameter->getName();
  47              $params[]      = var_export($parameterName, true) . ' => $' . $parameter->getName();
  48          }
  49  
  50          $paramsString = 'array(' . implode(', ', $params) . ')';
  51  
  52          return "if (isset(\$this->$prefixInterceptorsName" . "[$name])) {\n"
  53              . "    \$returnEarly       = false;\n"
  54              . "    \$prefixReturnValue = \$this->$prefixInterceptorsName" . "[$name]->__invoke("
  55              . "\$this, \$this->$valueHolderName, $name, $paramsString, \$returnEarly);\n\n"
  56              . "    if (\$returnEarly) {\n"
  57              . '        ' . ProxiedMethodReturnExpression::generate('$prefixReturnValue', $originalMethod) . "\n"
  58              . "    }\n"
  59              . "}\n\n"
  60              . $methodBody . "\n\n"
  61              . "if (isset(\$this->$suffixInterceptorsName" . "[$name])) {\n"
  62              . "    \$returnEarly       = false;\n"
  63              . "    \$suffixReturnValue = \$this->$suffixInterceptorsName" . "[$name]->__invoke("
  64              . "\$this, \$this->$valueHolderName, $name, $paramsString, \$returnValue, \$returnEarly);\n\n"
  65              . "    if (\$returnEarly) {\n"
  66              . '        ' . ProxiedMethodReturnExpression::generate('$suffixReturnValue', $originalMethod) . "\n"
  67              . "    }\n"
  68              . "}\n\n"
  69              . ProxiedMethodReturnExpression::generate('$returnValue', $originalMethod);
  70      }
  71  }


Generated: Mon Nov 25 19:05:08 2024 Cross-referenced by PHPXref 0.7.1