]> granicus.if.org Git - php/commitdiff
- Do not include because of implementing an interface if parent implements
authorMarcus Boerger <helly@php.net>
Fri, 21 Oct 2005 23:42:56 +0000 (23:42 +0000)
committerMarcus Boerger <helly@php.net>
Fri, 21 Oct 2005 23:42:56 +0000 (23:42 +0000)
  the interface already

ext/spl/examples/class_tree.php

index b57eba373e58e0f97c9d0793add382b3a4194768..c530112f47599211597b3ef40c451e6928f317e2 100755 (executable)
@@ -33,17 +33,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));
+                                               }
                                        }
                                }
                        }