[ Index ] |
PHP Cross Reference of phpBB-3.2.11-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-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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 11 20:33:01 2020 | Cross-referenced by PHPXref 0.7.1 |