class_tree.php

Go to the documentation of this file.
00001 <?php
00002 
00015 if ($argc < 2) {
00016     echo <<<EOF
00017 Usage: php ${_SERVER['PHP_SELF']} <class>
00018 
00019 Displays a graphical tree for the given <class>.
00020 
00021 <class> The class or interface for which to generate the tree graph.
00022 
00023 
00024 EOF;
00025     exit(1);
00026 }
00027 
00028 if (!class_exists("RecursiveTreeIterator", false)) require_once("recursivetreeiterator.inc");
00029 
00032 class SubClasses extends RecursiveArrayIterator
00033 {
00037     function __construct($base, $check_interfaces = false)
00038     {
00039         foreach(get_declared_classes() as $cname)
00040         {
00041             if (strcasecmp(get_parent_class($cname), $base) == 0)
00042             {
00043                 $this->offsetSet($cname, new SubClasses($cname));
00044             }
00045             if ($check_interfaces)
00046             {
00047                 foreach(class_implements($cname) as $iname)
00048                 {
00049                     if (strcasecmp($iname, $base) == 0)
00050                     {
00051                         $this->offsetSet($cname, new SubClasses($cname));
00052                     }
00053                 }
00054             }
00055         }
00056         if ($check_interfaces)
00057         {
00058             foreach(get_declared_interfaces() as $cname)
00059             {
00060                 foreach(class_implements($cname) as $iname)
00061                 {
00062                     if (strcasecmp($iname, $base) == 0)
00063                     {
00064                         $this->offsetSet($cname, new SubClasses($cname, true));
00065                     }
00066                 }
00067             }
00068         }
00069     }
00070 
00073     function current()
00074     {
00075         return parent::key();
00076     }
00077 }
00078 
00079 $it = new RecursiveTreeIterator(new SubClasses($argv[1], true));
00080 
00081 echo $argv[1]."\n";
00082 foreach($it as $c=>$v)
00083 {
00084     echo "$v\n";
00085 }
00086 
00087 ?>

Generated on Thu Apr 26 01:04:46 2007 for SPL-StandardPHPLibrary by  doxygen 1.5.2