[ Index ]

PHP Cross Reference of phpBB-3.2.11-deutsch

title

Body

[close]

/vendor/zendframework/zend-code/src/Scanner/ -> PropertyScanner.php (source)

   1  <?php
   2  /**
   3   * Zend Framework (http://framework.zend.com/)
   4   *
   5   * @link      http://github.com/zendframework/zf2 for the canonical source repository
   6   * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
   7   * @license   http://framework.zend.com/license/new-bsd New BSD License
   8   */
   9  
  10  namespace Zend\Code\Scanner;
  11  
  12  use Zend\Code\Annotation;
  13  use Zend\Code\Exception;
  14  use Zend\Code\NameInformation;
  15  
  16  class PropertyScanner implements ScannerInterface
  17  {
  18      const T_BOOLEAN = "boolean";
  19      const T_INTEGER = "int";
  20      const T_STRING  = "string";
  21      const T_ARRAY   = "array";
  22      const T_UNKNOWN = "unknown";
  23  
  24      /**
  25       * @var bool
  26       */
  27      protected $isScanned = false;
  28  
  29      /**
  30       * @var array
  31       */
  32      protected $tokens;
  33  
  34      /**
  35       * @var NameInformation
  36       */
  37      protected $nameInformation;
  38  
  39      /**
  40       * @var string
  41       */
  42      protected $class;
  43  
  44      /**
  45       * @var ClassScanner
  46       */
  47      protected $scannerClass;
  48  
  49      /**
  50       * @var int
  51       */
  52      protected $lineStart;
  53  
  54      /**
  55       * @var bool
  56       */
  57      protected $isProtected = false;
  58  
  59      /**
  60       * @var bool
  61       */
  62      protected $isPublic = true;
  63  
  64      /**
  65       * @var bool
  66       */
  67      protected $isPrivate = false;
  68  
  69      /**
  70       * @var bool
  71       */
  72      protected $isStatic = false;
  73  
  74      /**
  75       * @var string
  76       */
  77      protected $docComment;
  78  
  79      /**
  80       * @var string
  81       */
  82      protected $name;
  83  
  84      /**
  85       * @var string
  86       */
  87      protected $value;
  88  
  89      /**
  90       * @var string
  91       */
  92      protected $valueType;
  93  
  94      /**
  95       * Constructor
  96       *
  97       * @param array $propertyTokens
  98       * @param NameInformation $nameInformation
  99       */
 100      public function __construct(array $propertyTokens, NameInformation $nameInformation = null)
 101      {
 102          $this->tokens = $propertyTokens;
 103          $this->nameInformation = $nameInformation;
 104      }
 105  
 106      /**
 107       * @param string $class
 108       */
 109      public function setClass($class)
 110      {
 111          $this->class = $class;
 112      }
 113  
 114      /**
 115       * @param ClassScanner $scannerClass
 116       */
 117      public function setScannerClass(ClassScanner $scannerClass)
 118      {
 119          $this->scannerClass = $scannerClass;
 120      }
 121  
 122      /**
 123       * @return ClassScanner
 124       */
 125      public function getClassScanner()
 126      {
 127          return $this->scannerClass;
 128      }
 129  
 130      /**
 131       * @return string
 132       */
 133      public function getName()
 134      {
 135          $this->scan();
 136          return $this->name;
 137      }
 138  
 139      /**
 140       * @return string
 141       */
 142      public function getValueType()
 143      {
 144          return $this->valueType;
 145      }
 146  
 147      /**
 148       * @return bool
 149       */
 150      public function isPublic()
 151      {
 152          $this->scan();
 153          return $this->isPublic;
 154      }
 155  
 156      /**
 157       * @return bool
 158       */
 159      public function isPrivate()
 160      {
 161          $this->scan();
 162          return $this->isPrivate;
 163      }
 164  
 165      /**
 166       * @return bool
 167       */
 168      public function isProtected()
 169      {
 170          $this->scan();
 171          return $this->isProtected;
 172      }
 173  
 174      /**
 175       * @return bool
 176       */
 177      public function isStatic()
 178      {
 179          $this->scan();
 180          return $this->isStatic;
 181      }
 182  
 183      /**
 184       * @return string
 185       */
 186      public function getValue()
 187      {
 188          $this->scan();
 189          return $this->value;
 190      }
 191  
 192      /**
 193       * @return string
 194       */
 195      public function getDocComment()
 196      {
 197          $this->scan();
 198          return $this->docComment;
 199      }
 200  
 201      /**
 202       * @param Annotation\AnnotationManager $annotationManager
 203       * @return AnnotationScanner
 204       */
 205      public function getAnnotations(Annotation\AnnotationManager $annotationManager)
 206      {
 207          if (($docComment = $this->getDocComment()) == '') {
 208              return false;
 209          }
 210  
 211          return new AnnotationScanner($annotationManager, $docComment, $this->nameInformation);
 212      }
 213  
 214      /**
 215       * @return string
 216       */
 217      public function __toString()
 218      {
 219          $this->scan();
 220          return var_export($this, true);
 221      }
 222  
 223      /**
 224       * Scan tokens
 225       *
 226       * @throws \Zend\Code\Exception\RuntimeException
 227       */
 228      protected function scan()
 229      {
 230          if ($this->isScanned) {
 231              return;
 232          }
 233  
 234          if (!$this->tokens) {
 235              throw new Exception\RuntimeException('No tokens were provided');
 236          }
 237  
 238          /**
 239           * Variables & Setup
 240           */
 241          $value            = '';
 242          $concatenateValue = false;
 243  
 244          $tokens = &$this->tokens;
 245          reset($tokens);
 246  
 247          foreach ($tokens as $token) {
 248              $tempValue = $token;
 249              if (!is_string($token)) {
 250                  list($tokenType, $tokenContent, $tokenLine) = $token;
 251  
 252                  switch ($tokenType) {
 253                      case T_DOC_COMMENT:
 254                          if ($this->docComment === null && $this->name === null) {
 255                              $this->docComment = $tokenContent;
 256                          }
 257                          break;
 258  
 259                      case T_VARIABLE:
 260                          $this->name = ltrim($tokenContent, '$');
 261                          break;
 262  
 263                      case T_PUBLIC:
 264                          // use defaults
 265                          break;
 266  
 267                      case T_PROTECTED:
 268                          $this->isProtected = true;
 269                          $this->isPublic = false;
 270                          break;
 271  
 272                      case T_PRIVATE:
 273                          $this->isPrivate = true;
 274                          $this->isPublic = false;
 275                          break;
 276  
 277                      case T_STATIC:
 278                          $this->isStatic = true;
 279                          break;
 280                      default:
 281                          $tempValue = trim($tokenContent);
 282                          break;
 283                  }
 284              }
 285  
 286              //end value concatenation
 287              if (!is_array($token) && trim($token) == ";") {
 288                  $concatenateValue = false;
 289              }
 290  
 291              if (true === $concatenateValue) {
 292                  $value .= $tempValue;
 293              }
 294  
 295              //start value concatenation
 296              if (!is_array($token) && trim($token) == "=") {
 297                  $concatenateValue = true;
 298              }
 299          }
 300  
 301          $this->valueType = self::T_UNKNOWN;
 302          if ($value == "false" || $value == "true") {
 303              $this->valueType = self::T_BOOLEAN;
 304          } elseif (is_numeric($value)) {
 305              $this->valueType = self::T_INTEGER;
 306          } elseif (0 === strpos($value, 'array') || 0 === strpos($value, "[")) {
 307              $this->valueType = self::T_ARRAY;
 308          } elseif (substr($value, 0, 1) === '"' || substr($value, 0, 1) === "'") {
 309              $value = substr($value, 1, -1); // Remove quotes
 310              $this->valueType = self::T_STRING;
 311          }
 312  
 313          $this->value = empty($value) ? null : $value;
 314          $this->isScanned = true;
 315      }
 316  }


Generated: Wed Nov 11 20:33:01 2020 Cross-referenced by PHPXref 0.7.1