[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/symfony/var-dumper/Caster/ -> ArgsStub.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of the Symfony package.
   5   *
   6   * (c) Fabien Potencier <[email protected]>
   7   *
   8   * For the full copyright and license information, please view the LICENSE
   9   * file that was distributed with this source code.
  10   */
  11  
  12  namespace Symfony\Component\VarDumper\Caster;
  13  
  14  use Symfony\Component\VarDumper\Cloner\Stub;
  15  
  16  /**
  17   * Represents a list of function arguments.
  18   *
  19   * @author Nicolas Grekas <[email protected]>
  20   */
  21  class ArgsStub extends EnumStub
  22  {
  23      private static $parameters = [];
  24  
  25      public function __construct(array $args, string $function, ?string $class)
  26      {
  27          [$variadic, $params] = self::getParameters($function, $class);
  28  
  29          $values = [];
  30          foreach ($args as $k => $v) {
  31              $values[$k] = !is_scalar($v) && !$v instanceof Stub ? new CutStub($v) : $v;
  32          }
  33          if (null === $params) {
  34              parent::__construct($values, false);
  35  
  36              return;
  37          }
  38          if (\count($values) < \count($params)) {
  39              $params = \array_slice($params, 0, \count($values));
  40          } elseif (\count($values) > \count($params)) {
  41              $values[] = new EnumStub(array_splice($values, \count($params)), false);
  42              $params[] = $variadic;
  43          }
  44          if (['...'] === $params) {
  45              $this->dumpKeys = false;
  46              $this->value = $values[0]->value;
  47          } else {
  48              $this->value = array_combine($params, $values);
  49          }
  50      }
  51  
  52      private static function getParameters(string $function, ?string $class): array
  53      {
  54          if (isset(self::$parameters[$k = $class.'::'.$function])) {
  55              return self::$parameters[$k];
  56          }
  57  
  58          try {
  59              $r = null !== $class ? new \ReflectionMethod($class, $function) : new \ReflectionFunction($function);
  60          } catch (\ReflectionException $e) {
  61              return [null, null];
  62          }
  63  
  64          $variadic = '...';
  65          $params = [];
  66          foreach ($r->getParameters() as $v) {
  67              $k = '$'.$v->name;
  68              if ($v->isPassedByReference()) {
  69                  $k = '&'.$k;
  70              }
  71              if ($v->isVariadic()) {
  72                  $variadic .= $k;
  73              } else {
  74                  $params[] = $k;
  75              }
  76          }
  77  
  78          return self::$parameters[$k] = [$variadic, $params];
  79      }
  80  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer