$class) { if (!DataObject::getSchema()->classHasTable($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 */ public 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? */ public static function has_extension($class, $extension, $includeSubclasses = true) { foreach (self::hierarchy($class, $includeSubclasses) as $relatedclass) { if ($relatedclass::has_extension($extension)) { return true; } } return false; } }