summaryrefslogtreecommitdiff
path: root/ext/spl/examples
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2008-02-02 21:02:25 +0000
committerMarcus Boerger <helly@php.net>2008-02-02 21:02:25 +0000
commitcd2953db579c16760a577876e1a220fe38fd31a6 (patch)
tree8f14b8531c5ac11915784ea4adb7819d09a88055 /ext/spl/examples
parent31219628085cb42040faa9acd190538916625c6d (diff)
downloadphp-git-cd2953db579c16760a577876e1a220fe38fd31a6.tar.gz
- MFH Show interfaces
Diffstat (limited to 'ext/spl/examples')
-rwxr-xr-xext/spl/examples/class_tree.php36
1 files changed, 31 insertions, 5 deletions
diff --git a/ext/spl/examples/class_tree.php b/ext/spl/examples/class_tree.php
index 4af610835f..fc021d5c01 100755
--- a/ext/spl/examples/class_tree.php
+++ b/ext/spl/examples/class_tree.php
@@ -4,8 +4,8 @@
* @brief Class Tree example
* @ingroup Examples
* @author Marcus Boerger
- * @date 2003 - 2005
- * @version 1.0
+ * @date 2003 - 2008
+ * @version 1.1
*
* Usage: php class_tree.php \<class\>
*
@@ -38,17 +38,25 @@ class SubClasses extends RecursiveArrayIterator
{
foreach(get_declared_classes() as $cname)
{
- if (strcasecmp(get_parent_class($cname), $base) == 0)
+ $parent = get_parent_class($cname);
+ if (strcasecmp($parent, $base) == 0)
{
$this->offsetSet($cname, new SubClasses($cname));
}
if ($check_interfaces)
{
+ if ($parent)
+ {
+ $parent_imp = class_implements($parent);
+ }
foreach(class_implements($cname) as $iname)
{
if (strcasecmp($iname, $base) == 0)
{
- $this->offsetSet($cname, new SubClasses($cname));
+ if (!$parent || !in_array($iname, $parent_imp))
+ {
+ $this->offsetSet($cname, new SubClasses($cname));
+ }
}
}
}
@@ -66,13 +74,31 @@ class SubClasses extends RecursiveArrayIterator
}
}
}
+ $this->uksort('strnatcasecmp');
}
/** @return key() since that is the name we need
*/
function current()
{
- return parent::key();
+ $result = parent::key();
+ $parent = get_parent_class($result);
+ if ($parent)
+ {
+ $interfaces = array_diff(class_implements($result), class_implements($parent));
+ if ($interfaces)
+ {
+ $implements = array();
+ foreach($interfaces as $interface)
+ {
+ $implements = array_merge($implements, class_implements($interface));
+ }
+ $interfaces = array_diff($interfaces, $implements);
+ natcasesort($interfaces);
+ $result .= ' (' . join(', ', $interfaces) . ')';
+ }
+ }
+ return $result;
}
}