summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2005-10-02 23:12:12 +0000
committerMarcus Boerger <helly@php.net>2005-10-02 23:12:12 +0000
commitf28eec269c62a71f7ee349c4888a96314c38345c (patch)
tree0fcc23ec2e18fe561871e8d2d6abc41ec6f92b29
parentb18ffb406e66a76c8f1710262cab8ad7771462e2 (diff)
downloadphp-git-f28eec269c62a71f7ee349c4888a96314c38345c.tar.gz
- Add new example
-rwxr-xr-xext/spl/examples/class_tree.php84
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