From: Marcus Boerger Date: Sun, 2 Oct 2005 23:12:12 +0000 (+0000) Subject: - Add new example X-Git-Tag: RELEASE_0_9_0~51 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f28eec269c62a71f7ee349c4888a96314c38345c;p=php - Add new example --- 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 @@ + + * + * Simply specify the root class or interface to tree with parameter \. + */ + +if ($argc < 2) { + echo << + +Displays a graphical tree for the given . + + 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