Verzeichnisstruktur phpBB-3.3.16


Veröffentlicht
27.04.2026

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Node.php

Zuletzt modifiziert: 01.05.2026, 11:27 - Dateigröße: 5.43 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of Twig.
 005   *
 006   * (c) Fabien Potencier
 007   * (c) Armin Ronacher
 008   *
 009   * For the full copyright and license information, please view the LICENSE
 010   * file that was distributed with this source code.
 011   */
 012   
 013  namespace Twig\Node;
 014   
 015  use Twig\Compiler;
 016  use Twig\Source;
 017   
 018  /**
 019   * Represents a node in the AST.
 020   *
 021   * @author Fabien Potencier <fabien@symfony.com>
 022   */
 023  class Node implements \Countable, \IteratorAggregate
 024  {
 025      protected $nodes;
 026      protected $attributes;
 027      protected $lineno;
 028      protected $tag;
 029   
 030      private $name;
 031      private $sourceContext;
 032   
 033      /**
 034       * @param array  $nodes      An array of named nodes
 035       * @param array  $attributes An array of attributes (should not be nodes)
 036       * @param int    $lineno     The line number
 037       * @param string $tag        The tag name associated with the Node
 038       */
 039      public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0, string $tag = null)
 040      {
 041          foreach ($nodes as $name => $node) {
 042              if (!$node instanceof self) {
 043                  throw new \InvalidArgumentException(sprintf('Using "%s" for the value of node "%s" of "%s" is not supported. You must pass a \Twig\Node\Node instance.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class));
 044              }
 045          }
 046          $this->nodes = $nodes;
 047          $this->attributes = $attributes;
 048          $this->lineno = $lineno;
 049          $this->tag = $tag;
 050      }
 051   
 052      public function __toString()
 053      {
 054          $attributes = [];
 055          foreach ($this->attributes as $name => $value) {
 056              $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true)));
 057          }
 058   
 059          $repr = [static::class.'('.implode(', ', $attributes)];
 060   
 061          if (\count($this->nodes)) {
 062              foreach ($this->nodes as $name => $node) {
 063                  $len = \strlen($name) + 4;
 064                  $noderepr = [];
 065                  foreach (explode("\n", (string) $node) as $line) {
 066                      $noderepr[] = str_repeat(' ', $len).$line;
 067                  }
 068   
 069                  $repr[] = sprintf('  %s: %s', $name, ltrim(implode("\n", $noderepr)));
 070              }
 071   
 072              $repr[] = ')';
 073          } else {
 074              $repr[0] .= ')';
 075          }
 076   
 077          return implode("\n", $repr);
 078      }
 079   
 080      public function compile(Compiler $compiler)
 081      {
 082          foreach ($this->nodes as $node) {
 083              $node->compile($compiler);
 084          }
 085      }
 086   
 087      public function getTemplateLine()
 088      {
 089          return $this->lineno;
 090      }
 091   
 092      public function getNodeTag()
 093      {
 094          return $this->tag;
 095      }
 096   
 097      /**
 098       * @return bool
 099       */
 100      public function hasAttribute($name)
 101      {
 102          return \array_key_exists($name, $this->attributes);
 103      }
 104   
 105      /**
 106       * @return mixed
 107       */
 108      public function getAttribute($name)
 109      {
 110          if (!\array_key_exists($name, $this->attributes)) {
 111              throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, static::class));
 112          }
 113   
 114          return $this->attributes[$name];
 115      }
 116   
 117      /**
 118       * @param string $name
 119       * @param mixed  $value
 120       */
 121      public function setAttribute($name, $value)
 122      {
 123          $this->attributes[$name] = $value;
 124      }
 125   
 126      public function removeAttribute($name)
 127      {
 128          unset($this->attributes[$name]);
 129      }
 130   
 131      /**
 132       * @return bool
 133       */
 134      public function hasNode($name)
 135      {
 136          return isset($this->nodes[$name]);
 137      }
 138   
 139      /**
 140       * @return Node
 141       */
 142      public function getNode($name)
 143      {
 144          if (!isset($this->nodes[$name])) {
 145              throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, static::class));
 146          }
 147   
 148          return $this->nodes[$name];
 149      }
 150   
 151      public function setNode($name, self $node)
 152      {
 153          $this->nodes[$name] = $node;
 154      }
 155   
 156      public function removeNode($name)
 157      {
 158          unset($this->nodes[$name]);
 159      }
 160   
 161      /**
 162       * @return int
 163       */
 164      #[\ReturnTypeWillChange]
 165      public function count()
 166      {
 167          return \count($this->nodes);
 168      }
 169   
 170      /**
 171       * @return \Traversable
 172       */
 173      #[\ReturnTypeWillChange]
 174      public function getIterator()
 175      {
 176          return new \ArrayIterator($this->nodes);
 177      }
 178   
 179      /**
 180       * @deprecated since 2.8 (to be removed in 3.0)
 181       */
 182      public function setTemplateName($name/*, $triggerDeprecation = true */)
 183      {
 184          $triggerDeprecation = 2 > \func_num_args() || \func_get_arg(1);
 185          if ($triggerDeprecation) {
 186              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0. Use setSourceContext() instead.', \E_USER_DEPRECATED);
 187          }
 188   
 189          $this->name = $name;
 190          foreach ($this->nodes as $node) {
 191              $node->setTemplateName($name, $triggerDeprecation);
 192          }
 193      }
 194   
 195      public function getTemplateName()
 196      {
 197          return $this->sourceContext ? $this->sourceContext->getName() : null;
 198      }
 199   
 200      public function setSourceContext(Source $source)
 201      {
 202          $this->sourceContext = $source;
 203          foreach ($this->nodes as $node) {
 204              $node->setSourceContext($source);
 205          }
 206   
 207          $this->setTemplateName($source->getName(), false);
 208      }
 209   
 210      public function getSourceContext()
 211      {
 212          return $this->sourceContext;
 213      }
 214  }
 215   
 216  class_alias('Twig\Node\Node', 'Twig_Node');
 217   
 218  // Ensure that the aliased name is loaded to keep BC for classes implementing the typehint with the old aliased name.
 219  class_exists('Twig\Compiler');
 220