helly           Sun Oct  2 19:12:12 2005 EDT

  Added files:                 
    /php-src/ext/spl/examples   class_tree.php 
  Log:
  - Add new example
  

http://cvs.php.net/co.php/php-src/ext/spl/examples/class_tree.php?r=1.1&p=1
Index: php-src/ext/spl/examples/class_tree.php
+++ php-src/ext/spl/examples/class_tree.php
<?php

/** @file   class_tree.php
 * @brief   Class Tree example
 * @ingroup Examples
 * @author  Marcus Boerger
 * @date    2003 - 2005
 *
 * Usage: php class_tree.php \<class\>
 *
 * Simply specify the root class or interface to tree with parameter \<class\>.
 */

if ($argc < 2) {
        echo <<<EOF
Usage: php ${_SERVER['PHP_SELF']} <class>

Displays a graphical tree for the given <class>.

<class> The class or interface for which to generate the tree graph.


EOF;
        exit(1);
}

if (!class_exists("RecursiveTreeIterator", false)) 
require_once("recursivetreeiterator.inc");

class SubClasses extends RecursiveArrayIterator
{
        function __construct($base, $check_interfaces = false)
        {
                foreach(get_declared_classes() as $cname)
                {
                        if (strcasecmp(get_parent_class($cname), $base) == 0)
                        {
                                $this->offsetSet($cname, new 
SubClasses($cname));
                        }
                        if ($check_interfaces)
                        {
                                foreach(class_implements($cname) as $iname)
                                {
                                        if (strcasecmp($iname, $base) == 0)
                                        {
                                                $this->offsetSet($cname, new 
SubClasses($cname));
                                        }
                                }
                        }
                }
                if ($check_interfaces)
                {
                        foreach(get_declared_interfaces() as $cname)
                        {
                                foreach(class_implements($cname) as $iname)
                                {
                                        if (strcasecmp($iname, $base) == 0)
                                        {
                                                $this->offsetSet($cname, new 
SubClasses($cname, true));
                                        }
                                }
                        }
                }
        }
        
        function getChildren()
        {
                return parent::current();
        }
        
        function current()
        {
                return parent::key();
        }
}

$it = new RecursiveTreeIterator(new SubClasses($argv[1], true));

echo $argv[1]."\n";
foreach($it as $c=>$v)
{
        echo "$v\n";
}

?>

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to