예제 #1
0
 protected function readClasses($file, $contents, $classTypes, $methodTypes)
 {
     //echo "RGX:$this->RGX_CLASS<br/>";
     preg_match_all($this->RGX_CLASS, $contents, $matches, PREG_OFFSET_CAPTURE);
     $lastClass = null;
     $classes = array();
     foreach ($matches[0] as $i => $match) {
         $class = new $classTypes();
         $class->reader = $this;
         $class->file = $file;
         $class->offset = intval($match[1]);
         $class->isAbstract = $matches[2][$i][1] != -1;
         $class->name = $matches[3][$i][0];
         $class->extends = $matches[4][$i][0];
         $class->interfaces = !empty($matches[5][$i][0]) ? ArrayUtil::trimValues(explode(',', $matches[5][$i][0])) : array();
         if ($lastClass != null) {
             $lastClass->limit = $class->offset - 1;
         }
         $doc = $matches[1][$i][0];
         $class->doc = $this->readDoc($doc);
         $classes[] = $class;
         $lastClass = $class;
     }
     if ($lastClass != null) {
         $lastClass->limit = strlen(trim($contents));
     }
     foreach ($classes as $class) {
         $class->source = substr($contents, $class->offset, $class->limit - $class->offset);
         $this->readMethods($class, $methodTypes);
         $class->source = '';
         foreach ($class->methods as $m) {
             //$m->source = substr($contents,$m->offset,$m->limit-$m->offset);
         }
     }
     ArrayUtil::append($this->classes, $classes);
 }