Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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

ParameterScanner.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 6.53 KiB


001  <?php
002  /**
003   * Zend Framework (http://framework.zend.com/)
004   *
005   * @link      http://github.com/zendframework/zf2 for the canonical source repository
006   * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
007   * @license   http://framework.zend.com/license/new-bsd New BSD License
008   */
009   
010  namespace Zend\Code\Scanner;
011   
012  use Zend\Code\NameInformation;
013   
014  class ParameterScanner
015  {
016      /**
017       * @var bool
018       */
019      protected $isScanned = false;
020   
021      /**
022       * @var null|ClassScanner
023       */
024      protected $declaringScannerClass = null;
025   
026      /**
027       * @var null|string
028       */
029      protected $declaringClass = null;
030   
031      /**
032       * @var null|MethodScanner
033       */
034      protected $declaringScannerFunction = null;
035   
036      /**
037       * @var null|string
038       */
039      protected $declaringFunction = null;
040   
041      /**
042       * @var null|string
043       */
044      protected $defaultValue = null;
045   
046      /**
047       * @var null|string
048       */
049      protected $class = null;
050   
051      /**
052       * @var null|string
053       */
054      protected $name = null;
055   
056      /**
057       * @var null|int
058       */
059      protected $position = null;
060   
061      /**
062       * @var bool
063       */
064      protected $isArray = false;
065   
066      /**
067       * @var bool
068       */
069      protected $isDefaultValueAvailable = false;
070   
071      /**
072       * @var bool
073       */
074      protected $isOptional = false;
075   
076      /**
077       * @var bool
078       */
079      protected $isPassedByReference = false;
080   
081      /**
082       * @var array|null
083       */
084      protected $tokens = null;
085   
086      /**
087       * @var null|NameInformation
088       */
089      protected $nameInformation = null;
090   
091      /**
092       * @param  array $parameterTokens
093       * @param  NameInformation $nameInformation
094       */
095      public function __construct(array $parameterTokens, NameInformation $nameInformation = null)
096      {
097          $this->tokens          = $parameterTokens;
098          $this->nameInformation = $nameInformation;
099      }
100   
101      /**
102       * Set declaring class
103       *
104       * @param  string $class
105       * @return void
106       */
107      public function setDeclaringClass($class)
108      {
109          $this->declaringClass = (string) $class;
110      }
111   
112      /**
113       * Set declaring scanner class
114       *
115       * @param  ClassScanner $scannerClass
116       * @return void
117       */
118      public function setDeclaringScannerClass(ClassScanner $scannerClass)
119      {
120          $this->declaringScannerClass = $scannerClass;
121      }
122   
123      /**
124       * Set declaring function
125       *
126       * @param  string $function
127       * @return void
128       */
129      public function setDeclaringFunction($function)
130      {
131          $this->declaringFunction = $function;
132      }
133   
134      /**
135       * Set declaring scanner function
136       *
137       * @param  MethodScanner $scannerFunction
138       * @return void
139       */
140      public function setDeclaringScannerFunction(MethodScanner $scannerFunction)
141      {
142          $this->declaringScannerFunction = $scannerFunction;
143      }
144   
145      /**
146       * Set position
147       *
148       * @param  int $position
149       * @return void
150       */
151      public function setPosition($position)
152      {
153          $this->position = $position;
154      }
155   
156      /**
157       * Scan
158       *
159       * @return void
160       */
161      protected function scan()
162      {
163          if ($this->isScanned) {
164              return;
165          }
166   
167          $tokens = &$this->tokens;
168   
169          reset($tokens);
170   
171          SCANNER_TOP:
172   
173          $token = current($tokens);
174   
175          if (is_string($token)) {
176              // check pass by ref
177              if ($token === '&') {
178                  $this->isPassedByReference = true;
179                  goto SCANNER_CONTINUE;
180              }
181              if ($token === '=') {
182                  $this->isOptional              = true;
183                  $this->isDefaultValueAvailable = true;
184                  goto SCANNER_CONTINUE;
185              }
186          } else {
187              if ($this->name === null && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR)) {
188                  $this->class .= $token[1];
189                  goto SCANNER_CONTINUE;
190              }
191              if ($token[0] === T_VARIABLE) {
192                  $this->name = ltrim($token[1], '$');
193                  goto SCANNER_CONTINUE;
194              }
195          }
196   
197          if ($this->name !== null) {
198              $this->defaultValue .= trim((is_string($token)) ? $token : $token[1]);
199          }
200   
201          SCANNER_CONTINUE:
202   
203          if (next($this->tokens) === false) {
204              goto SCANNER_END;
205          }
206          goto SCANNER_TOP;
207   
208          SCANNER_END:
209   
210          if ($this->class && $this->nameInformation) {
211              $this->class = $this->nameInformation->resolveName($this->class);
212          }
213   
214          $this->isScanned = true;
215      }
216   
217      /**
218       * Get declaring scanner class
219       *
220       * @return ClassScanner
221       */
222      public function getDeclaringScannerClass()
223      {
224          return $this->declaringScannerClass;
225      }
226   
227      /**
228       * Get declaring class
229       *
230       * @return string
231       */
232      public function getDeclaringClass()
233      {
234          return $this->declaringClass;
235      }
236   
237      /**
238       * Get declaring scanner function
239       *
240       * @return MethodScanner
241       */
242      public function getDeclaringScannerFunction()
243      {
244          return $this->declaringScannerFunction;
245      }
246   
247      /**
248       * Get declaring function
249       *
250       * @return string
251       */
252      public function getDeclaringFunction()
253      {
254          return $this->declaringFunction;
255      }
256   
257      /**
258       * Get default value
259       *
260       * @return string
261       */
262      public function getDefaultValue()
263      {
264          $this->scan();
265   
266          return $this->defaultValue;
267      }
268   
269      /**
270       * Get class
271       *
272       * @return string
273       */
274      public function getClass()
275      {
276          $this->scan();
277   
278          return $this->class;
279      }
280   
281      /**
282       * Get name
283       *
284       * @return string
285       */
286      public function getName()
287      {
288          $this->scan();
289   
290          return $this->name;
291      }
292   
293      /**
294       * Get position
295       *
296       * @return int
297       */
298      public function getPosition()
299      {
300          $this->scan();
301   
302          return $this->position;
303      }
304   
305      /**
306       * Check if is array
307       *
308       * @return bool
309       */
310      public function isArray()
311      {
312          $this->scan();
313   
314          return $this->isArray;
315      }
316   
317      /**
318       * Check if default value is available
319       *
320       * @return bool
321       */
322      public function isDefaultValueAvailable()
323      {
324          $this->scan();
325   
326          return $this->isDefaultValueAvailable;
327      }
328   
329      /**
330       * Check if is optional
331       *
332       * @return bool
333       */
334      public function isOptional()
335      {
336          $this->scan();
337   
338          return $this->isOptional;
339      }
340   
341      /**
342       * Check if is passed by reference
343       *
344       * @return bool
345       */
346      public function isPassedByReference()
347      {
348          $this->scan();
349   
350          return $this->isPassedByReference;
351      }
352  }
353