/** * Gets an array of classes and their corresponding definition files, or examines a file and * returns the classes it defines. * * @param array $options * @return array Associative of classes and their corresponding definition files * @todo Document valid options */ public static function classes($options = array()) { $defaults = array('group' => 'classes', 'file' => null); $options += $defaults; $list = get_declared_classes(); $classes = array(); if (!empty($options['file'])) { $loaded = new Collection(array('items' => array_map(function ($class) { return new ReflectionClass($class); }, $list))); if (!in_array($options['file'], $loaded->getFileName())) { include $options['file']; $list = array_diff(get_declared_classes(), $list); } else { $file = $options['file']; $filter = function ($class) use($file) { return $class->getFileName() == $file; }; $list = $loaded->find($filter)->getName(); } } foreach ($list as $class) { $inspector = new ReflectionClass($class); if ($options['group'] == 'classes') { $inspector->getFileName() ? $classes[$class] = $inspector->getFileName() : null; } elseif ($options['group'] == 'files') { $classes[$inspector->getFileName()][] = $inspector; } } return $classes; }