Dies ist, wie Sie es tun können:
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'));
aus irgendeinem Grund, wenn Sie nicht wollen, um die Klassen zu laden, und Sie wollen einfach nur in den angegebenen Ordner-Klassen-Namen, dann mit dieser Funktion :
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'));
Was möchten Sie mit den Klassen tun? Einfach iterieren? Und was? – AbraCadaver
Verwenden Sie einen [PSR-4] (http://www.php-fig.org/psr/psr-4/) Autoloader. Wenn Sie Ihre Klassen entsprechend der Verzeichnisprüfung namespace zuweisen, ist es einfach, über sie mit z. B. zu iterieren. [Reflektion] (http://php.net/manual/en/reflectionclass.innamespace.php). –
@PavelKoch Sie schlagen also vor, von den Basisverzeichnissen zu starten, die in 'composer.json' deklariert sind, und durchlaufen alle Unterordner und die darin enthaltenen Dateien und für jede Datei eine Klasse mit dem gleichen Namen? – marcosh