/** * Reflects on a given file, parsing out classes and methods * for serialization. * * @param string $path the path of a file to reflect. * @return object the serialized documentation object. */ public function reflectFile($path) { // adding ./ to the beginning of relative paths fixes an issue including php files if (!preg_match('/^(?:[a-zA-Z]:\\|\\/)/', $path)) { $path = '.' . DIRECTORY_SEPARATOR . $path; } require_once $path; $filename = $filename = preg_replace("|^.*[\\\\/]|", $path, ''); $serial = new StdClass(); $serial->constants = array(); $serial->variables = array(); $serial->namespaces = array(); $serial->classes = array(); $serial->interfaces = array(); $serial->functions = array(); $file_reflector = new Zend_Reflection_File($path); $serial->tags = array(); try { $db = $file_reflector->getDocBlock(); $tags = $db->getTags(); foreach ($tags as $tag) { $tagSerial = new StdClass(); $tagSerial->name = $tag->getName(); $tagSerial->description = $tag->getDescription(); $serial->tags[] = $tagSerial; } } catch (Zend_Reflection_Exception $e) { $db = false; } $classes = $file_reflector->getClasses(); foreach ($classes as $class) { $classSerial = $this->reflectClass($class); $isInterface = $classSerial->interface; unset($classSerial->interface); if ($isInterface == false) { $serial->classes[$classSerial->name] = $classSerial; } else { $serial->interfaces[$classSerial->name] = $classSerial; } unset($classSerial->name); } $functions = $file_reflector->getFunctions(); foreach ($functions as $function) { $functionSerial = $this->reflectMethod($function); $serial->functions[$function->name] = $functionSerial; } $serial->meta = $this->_getMeta(); $serial->meta->path = $path; return $serial; }
/** * Reflects on a given file parsing out classes and methods * for serialization. * * @param string $path the path of a file to reflect. * @return object the serialized documentation object. */ public function reflectFile($path) { // adding ./ to the beginning of relative paths fixes an issue including php files if ($path[0] !== "/" && !preg_match('/^(?:[a-zA-Z]:\\|\\/)/', $path)) { $path = '.' . DIRECTORY_SEPARATOR . $path; } // don't require if the file has already been autoloaded. if (!in_array($path, get_included_files())) { require_once $path; } $filename = preg_replace("|^.*[\\\\/]|", $path, ''); $serial = new Vonnegut_Namespace(); $file_reflector = new Zend_Reflection_File($path); $serial->tags = array(); try { $db = $file_reflector->getDocBlock(); $tags = $db->getTags(); foreach ($tags as $tag) { $tagSerial = new StdClass(); $tagSerial->name = $tag->getName(); $tagSerial->description = $tag->getDescription(); $serial->tags[] = $tagSerial; } } catch (Zend_Reflection_Exception $e) { $db = false; } $classes = $file_reflector->getClasses(); foreach ($classes as $class) { $classSerial = $this->reflectClass($class); $serial->classes->{$classSerial->name} = $classSerial; } /* $functions = $file_reflector->getFunctions(); foreach ( $functions as $function ) { $functionSerial = $this->reflectMethod($function); $serial->functions[$function->name] = $functionSerial; } */ $serial->meta = $this->_getMeta(); $serial->meta->path = $path; return $serial; }