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