diff options
author | Marcus Boerger <helly@php.net> | 2005-10-02 23:12:12 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2005-10-02 23:12:12 +0000 |
commit | f28eec269c62a71f7ee349c4888a96314c38345c (patch) | |
tree | 0fcc23ec2e18fe561871e8d2d6abc41ec6f92b29 | |
parent | b18ffb406e66a76c8f1710262cab8ad7771462e2 (diff) | |
download | php-git-f28eec269c62a71f7ee349c4888a96314c38345c.tar.gz |
- Add new example
-rwxr-xr-x | ext/spl/examples/class_tree.php | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/ext/spl/examples/class_tree.php b/ext/spl/examples/class_tree.php new file mode 100755 index 0000000000..128eebec58 --- /dev/null +++ b/ext/spl/examples/class_tree.php @@ -0,0 +1,84 @@ +<?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"; +} + +?>
\ No newline at end of file |