$class) { if (!DataObject::has_own_table($class)) unset($classes[$i]); } self::$hierarchy[$key] = $classes; } return self::$hierarchy[$key]; } /** * Add classes to list, keeping only the parent when parent & child are both in list after add */ static function add_unique_by_ancestor(&$list, $class) { // If class already has parent in list, just ignore if (self::is_subclass_of($class, $list)) return; // Strip out any subclasses of $class already in the list $children = ClassInfo::subclassesFor($class); $list = array_diff($list, $children); // Then add the class in $list[] = $class; } /** * Does this class, it's parent (or optionally one of it's children) have the passed extension attached? */ static function has_extension($class, $extension, $includeSubclasses = true) { foreach (self::hierarchy($class, $includeSubclasses) as $relatedclass) { if (Object::has_extension($relatedclass, $extension)) return true; } return false; } }