You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
1.7 KiB

21 years ago
21 years ago
21 years ago
  1. <?php
  2. /** @file class_tree.php
  3. * @brief Class Tree example
  4. * @ingroup Examples
  5. * @author Marcus Boerger
  6. * @date 2003 - 2005
  7. * @version 1.0
  8. *
  9. * Usage: php class_tree.php \<class\>
  10. *
  11. * Simply specify the root class or interface to tree with parameter \<class\>.
  12. */
  13. if ($argc < 2) {
  14. echo <<<EOF
  15. Usage: php ${_SERVER['PHP_SELF']} <class>
  16. Displays a graphical tree for the given <class>.
  17. <class> The class or interface for which to generate the tree graph.
  18. EOF;
  19. exit(1);
  20. }
  21. if (!class_exists("RecursiveTreeIterator", false)) require_once("recursivetreeiterator.inc");
  22. /** \brief Collects sub classes for given class or interface
  23. */
  24. class SubClasses extends RecursiveArrayIterator
  25. {
  26. /** @param base base class to collect sub classes for
  27. * @param check_interfaces whether we deal with interfaces
  28. */
  29. function __construct($base, $check_interfaces = false)
  30. {
  31. foreach(get_declared_classes() as $cname)
  32. {
  33. if (strcasecmp(get_parent_class($cname), $base) == 0)
  34. {
  35. $this->offsetSet($cname, new SubClasses($cname));
  36. }
  37. if ($check_interfaces)
  38. {
  39. foreach(class_implements($cname) as $iname)
  40. {
  41. if (strcasecmp($iname, $base) == 0)
  42. {
  43. $this->offsetSet($cname, new SubClasses($cname));
  44. }
  45. }
  46. }
  47. }
  48. if ($check_interfaces)
  49. {
  50. foreach(get_declared_interfaces() as $cname)
  51. {
  52. foreach(class_implements($cname) as $iname)
  53. {
  54. if (strcasecmp($iname, $base) == 0)
  55. {
  56. $this->offsetSet($cname, new SubClasses($cname, true));
  57. }
  58. }
  59. }
  60. }
  61. }
  62. /** @return key() since that is the name we need
  63. */
  64. function current()
  65. {
  66. return parent::key();
  67. }
  68. }
  69. $it = new RecursiveTreeIterator(new SubClasses($argv[1], true));
  70. echo $argv[1]."\n";
  71. foreach($it as $c=>$v)
  72. {
  73. echo "$v\n";
  74. }
  75. ?>