%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 49.231.201.246 / Your IP : 216.73.216.149 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/11585/cwd/html/egp/vendor/codeception/codeception/src/Codeception/Util/ |
Upload File : |
<?php namespace Codeception\Util; /** * Simple annotation parser. Take only key-value annotations for methods or class. */ class Annotation { protected static $reflectedClasses = []; protected static $regex = '/@%s(?:[ \t]*(.*?))?[ \t]*(?:\*\/)?\r?$/m'; protected static $lastReflected = null; /** * @var \ReflectionClass */ protected $reflectedClass; protected $currentReflectedItem; /** * Grabs annotation values. * * Usage example: * * ``` php * <?php * Annotation::forClass('MyTestCase')->fetch('guy'); * Annotation::forClass('MyTestCase')->method('testData')->fetch('depends'); * Annotation::forClass('MyTestCase')->method('testData')->fetchAll('depends'); * * ?> * ``` * * @param $class * * @return $this */ public static function forClass($class) { if (is_object($class)) { $class = get_class($class); } if (!isset(static::$reflectedClasses[$class])) { static::$reflectedClasses[$class] = new \ReflectionClass($class); } return new static(static::$reflectedClasses[$class]); } /** * @param $class * @param $method * * @return $this */ public static function forMethod($class, $method) { return self::forClass($class)->method($method); } /** * Parses raw comment for annotations * * @param $docblock * @param $annotation * @return array */ public static function fetchAnnotationsFromDocblock($annotation, $docblock) { if (preg_match_all(sprintf(self::$regex, $annotation), $docblock, $matched)) { return $matched[1]; } return []; } /** * Fetches all available annotations * * @param $docblock * @return array */ public static function fetchAllAnnotationsFromDocblock($docblock) { $annotations = []; if (!preg_match_all(sprintf(self::$regex, '(\w+)'), $docblock, $matched)) { return $annotations; } foreach ($matched[1] as $k => $annotation) { if (!isset($annotations[$annotation])) { $annotations[$annotation] = []; } $annotations[$annotation][] = $matched[2][$k]; }; return $annotations; } public function __construct(\ReflectionClass $class) { $this->currentReflectedItem = $this->reflectedClass = $class; } /** * @param $method * * @return $this */ public function method($method) { $this->currentReflectedItem = $this->reflectedClass->getMethod($method); return $this; } /** * @param $annotation * @return null */ public function fetch($annotation) { $docBlock = $this->currentReflectedItem->getDocComment(); if (preg_match(sprintf(self::$regex, $annotation), $docBlock, $matched)) { return $matched[1]; } return null; } /** * @param $annotation * @return array */ public function fetchAll($annotation) { $docBlock = $this->currentReflectedItem->getDocComment(); if (preg_match_all(sprintf(self::$regex, $annotation), $docBlock, $matched)) { return $matched[1]; } return []; } public function raw() { return $this->currentReflectedItem->getDocComment(); } /** * Returns an associative array value of annotation * Either JSON or Doctrine-annotation style allowed * Returns null if not a valid array data * * @param $annotation * @return array|mixed|string */ public static function arrayValue($annotation) { $annotation = trim($annotation); $openingBrace = substr($annotation, 0, 1); // json-style data format if (in_array($openingBrace, ['{', '['])) { return json_decode($annotation, true); } // doctrine-style data format if ($openingBrace === '(') { preg_match_all('~(\w+)\s*?=\s*?"(.*?)"\s*?[,)]~', $annotation, $matches, PREG_SET_ORDER); $data = []; foreach ($matches as $item) { $data[$item[1]] = $item[2]; } return $data; } return null; } }