/** Run through all classes and cache the relevant TLO/TLORelationship classes **/ public static function classDetect() { if (!is_null(self::$_tlo_classes)) { return; } self::$_tlo_classes = array(); self::$_tlo_relationship_classes = array(); foreach (get_declared_classes() as $class) { $reflect = new ReflectionClass($class); if ($reflect->isAbstract()) { continue; } if (is_subclass_of($class, 'TLO')) { self::$_tlo_classes[] = $class; } if (is_subclass_of($class, 'TLORelationship')) { try { $class::relationOne(); $many_side = $class::relationMany(); } catch (TLOException $e) { throw new TLOException('Class "%s" does not have both static functions "relationMany" and "relationOne" set up', $class); } if (!isset(self::$_tlo_relationship_classes[$many_side])) { self::$_tlo_relationship_classes[$many_side] = array(); } self::$_tlo_relationship_classes[$many_side][] = $class; } } }