[ Index ]

PHP Cross Reference of phpBB-3.3.3-deutsch

title

Body

[close]

/vendor/twig/twig/src/Node/Expression/ -> NameExpression.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of Twig.
   5   *
   6   * (c) Fabien Potencier
   7   * (c) Armin Ronacher
   8   *
   9   * For the full copyright and license information, please view the LICENSE
  10   * file that was distributed with this source code.
  11   */
  12  
  13  namespace Twig\Node\Expression;
  14  
  15  use Twig\Compiler;
  16  
  17  class NameExpression extends AbstractExpression
  18  {
  19      private $specialVars = [
  20          '_self' => '$this->getTemplateName()',
  21          '_context' => '$context',
  22          '_charset' => '$this->env->getCharset()',
  23      ];
  24  
  25      public function __construct(string $name, int $lineno)
  26      {
  27          parent::__construct([], ['name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false], $lineno);
  28      }
  29  
  30      public function compile(Compiler $compiler)
  31      {
  32          $name = $this->getAttribute('name');
  33  
  34          $compiler->addDebugInfo($this);
  35  
  36          if ($this->getAttribute('is_defined_test')) {
  37              if ($this->isSpecial()) {
  38                  $compiler->repr(true);
  39              } elseif (\PHP_VERSION_ID >= 70400) {
  40                  $compiler
  41                      ->raw('array_key_exists(')
  42                      ->string($name)
  43                      ->raw(', $context)')
  44                  ;
  45              } else {
  46                  $compiler
  47                      ->raw('(isset($context[')
  48                      ->string($name)
  49                      ->raw(']) || array_key_exists(')
  50                      ->string($name)
  51                      ->raw(', $context))')
  52                  ;
  53              }
  54          } elseif ($this->isSpecial()) {
  55              $compiler->raw($this->specialVars[$name]);
  56          } elseif ($this->getAttribute('always_defined')) {
  57              $compiler
  58                  ->raw('$context[')
  59                  ->string($name)
  60                  ->raw(']')
  61              ;
  62          } else {
  63              if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) {
  64                  $compiler
  65                      ->raw('($context[')
  66                      ->string($name)
  67                      ->raw('] ?? null)')
  68                  ;
  69              } else {
  70                  $compiler
  71                      ->raw('(isset($context[')
  72                      ->string($name)
  73                      ->raw(']) || array_key_exists(')
  74                      ->string($name)
  75                      ->raw(', $context) ? $context[')
  76                      ->string($name)
  77                      ->raw('] : (function () { throw new RuntimeError(\'Variable ')
  78                      ->string($name)
  79                      ->raw(' does not exist.\', ')
  80                      ->repr($this->lineno)
  81                      ->raw(', $this->source); })()')
  82                      ->raw(')')
  83                  ;
  84              }
  85          }
  86      }
  87  
  88      public function isSpecial()
  89      {
  90          return isset($this->specialVars[$this->getAttribute('name')]);
  91      }
  92  
  93      public function isSimple()
  94      {
  95          return !$this->isSpecial() && !$this->getAttribute('is_defined_test');
  96      }
  97  }
  98  
  99  class_alias('Twig\Node\Expression\NameExpression', 'Twig_Node_Expression_Name');


Generated: Sun Feb 14 20:08:31 2021 Cross-referenced by PHPXref 0.7.1