lithium\analysis\Inspector::classes()
Gets an array of classes and their corresponding definition files, or examines a file and returns the classes it defines.
Parameters
-
array
$options
Option consists of:
'group'
: Can beclasses
for grouping by class name orfiles
for grouping by filename.- `'file': Valid file path for inspecting the containing classes.
Returns
arrayAssociative of classes and their corresponding definition files
Source
public static function classes(array $options = array()) {
$defaults = array('group' => 'classes', 'file' => null);
$options += $defaults;
$list = get_declared_classes();
$files = get_included_files();
$classes = array();
if ($file = $options['file']) {
$loaded = static::_instance('collection', array('data' => array_map(
function($class) { return new ReflectionClass($class); }, $list
)));
$classFiles = $loaded->getFileName();
if (in_array($file, $files) && !in_array($file, $classFiles)) {
return array();
}
if (!in_array($file, $classFiles)) {
include $file;
$list = array_diff(get_declared_classes(), $list);
} else {
$filter = function($class) use ($file) { return $class->getFileName() === $file; };
$list = $loaded->find($filter)->map(function ($class) {
return $class->getName() ?: $class->name;
}, array('collect' => false));
}
}
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;
}