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); }