php - 迭代文件夹中定义的类

时间:2016-09-02 17:31:25

标签: php class

我想迭代特定文件夹中定义的所有类。有可能吗?

据我所知,我不能使用get_declared_classes,因为它只考虑已经使用过的类。

1 个答案:

答案 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'));