/** * Create a syntax highlighted diagram of a class, including parent dependencies, memebers and functions. * * @param object $obj The object to explore. * @return string The formatted diagram of the object. */ public static function classes($obj) { echo self::$is_themed ? '' : self::$theme; $current_class = new \ReflectionObject($obj); $class = new \ReflectionClass($current_class->getName()); $parents = array(); while ($parent = $class->getParentClass()) { $mod = "<h3><b class='rtn'>{$parstr}</b>" . implode(' ', \Reflection::getModifierNames($class->getModifiers())); $nam = "Class <b class='nam'>" . $class->getName() . "</b></h3>"; $lin = self::get_func_url($class->getStartLine(), $class->getEndLine(), $class->getFileName()); $doc = self::clean_docblok($class->getdocComment(), false, "Undocumented {$parstr}" . "Class"); $parents[] = "<div class='method'>"; $parents[] = $lin; $parents[] = Syntax::php(trim($mod . $nam), 'all'); $parents[] = "<b class='com'>{$doc}</b>"; $properties = implode($class->getProperties()); $properties = str_replace('<default>', '', $properties); $properties = str_replace('Property [ ', '', $properties); $properties = str_replace(' ]', '', $properties); $properties = explode(' ', $properties); $len = 0; foreach ($properties as $k => $v) { if ($k % 2 !== 0) { $test = strlen($v); $len = $test > $len ? $test + 1 : $len; } } foreach ($properties as $k => $v) { $properties[$k] = ltrim(sprintf("%-{$len}s", $v)); } $properties = implode('', $properties); $properties = explode("\n", $properties); asort($properties); $properties = "<h4>Properties:</h4>" . implode("\n", $properties); $parents[] = Syntax::php($properties, 'all'); if ($parstr !== 'Parent ') { $parents[] = self::build_func_list($obj); } $parents[] = "</div>"; $parstr = "Parent "; $class = $parent; } $class_info = "Parents: " . implode(", ", $parents); $class_info = Syntax::php($class_info, 'all'); $classinfo = implode($parents); echo $classinfo; /* $class = new \ReflectionObject($obj); ReflectionObject::export($obj); $test = new \ReflectionClass($obj); print_r($test->getProperties()); echo 'getConstants() '; print_r( $class->getConstants() ) .PHP_EOL; echo 'getDefaultProperties()'; print_r( $class->getDefaultProperties() ) .PHP_EOL; echo 'getInterfaceNames() '; print_r( $class->getInterfaceNames() ) .PHP_EOL; echo 'getInterfaces() '; print_r( $class->getInterfaces() ) .PHP_EOL; echo 'getMethods() '; print_r( $class->getMethods() ) .PHP_EOL; echo 'getProperties() '; print_r( $class->getProperties() ) .PHP_EOL; echo 'getStaticProperties() '; print_r( $class->getStaticProperties() ) .PHP_EOL; echo 'getTraitAliases() '; print_r( $class->getTraitAliases() ) .PHP_EOL; echo 'getTraitNames() '; print_r( $class->getTraitNames() ) .PHP_EOL; echo 'getTraits() '; print_r( $class->getTraits() ) .PHP_EOL; echo 'hasConstant() '. AT::boolstr( $class->hasConstant($class->getName())) .PHP_EOL; echo 'inNamespace() '. AT::boolstr( $class->inNamespace() ) .PHP_EOL; echo 'isAbstract() '. AT::boolstr( $class->isAbstract() ) .PHP_EOL; echo 'isCloneable() '. AT::boolstr( $class->isCloneable() ) .PHP_EOL; echo 'isFinal() '. AT::boolstr( $class->isFinal() ) .PHP_EOL; echo 'isInstantiable() '. AT::boolstr( $class->isInstantiable() ) .PHP_EOL; echo 'isInterface() '. AT::boolstr( $class->isInterface() ) .PHP_EOL; echo 'isInternal() '. AT::boolstr( $class->isInternal() ) .PHP_EOL; echo 'isIterateable() '. AT::boolstr( $class->isIterateable() ) .PHP_EOL; echo 'isTrait() '. AT::boolstr( $class->isTrait() ) .PHP_EOL; echo 'isUserDefined() '. AT::boolstr( $class->isUserDefined() ) .PHP_EOL; echo 'getEndLine() '. $class->getEndLine() .PHP_EOL; echo 'getModifiers() '. $class->getModifiers() .PHP_EOL; echo 'getStartLine() '. $class->getStartLine() .PHP_EOL; echo 'getDocComment() '. $class->getDocComment() .PHP_EOL; echo 'getExtensionName() '. $class->getExtensionName() .PHP_EOL; echo 'getFileName() '. $class->getFileName() .PHP_EOL; echo 'getName() '. $class->getName() .PHP_EOL; echo 'getNamespaceName() '. $class->getNamespaceName() .PHP_EOL; echo 'getShortName() '. $class->getShortName() .PHP_EOL; */ }