我想迭代特定文件夹中定义的所有类。有可能吗?
据我所知,我不能使用get_declared_classes
,因为它只考虑已经使用过的类。
答案 0 :(得分:2)
这是你可以做到的:
function getDirClasses($dir)
{
// store already declared classes:
$predeclaredClasses = get_declared_classes();
// Load classes inside the given folder:
$i = new FileSystemIterator($dir, FileSystemIterator::SKIP_DOTS);
foreach ($i as $f) {
require_once $f->getPathname();
}
// Enjoy
return array_diff(get_declared_classes(), $predeclaredClasses);
}
var_dump(getDirClasses(__DIR__ . '/src'));
如果由于任何原因,您不想加载类,并且您只想在给定文件夹中的类名,那么使用此函数:
function getDirClassesUsingGrep($dir)
{
if (is_dir($dir)) {
$cmd = 'grep --no-filename -E "^\S*class +.+( *{)?$" ' . $dir . '/* | cut -d" " -f2';
exec($cmd, $output);
return $output;
}
return false;
}
var_dump(getDirClassesUsingGrep(__DIR__ . '/src'));