2016-09-02 13 views
0

特定のフォルダ内で定義されているすべてのクラスについて反復したいと思います。出来ますか?php - フォルダ内で定義されたクラスを反復する

私が理解する限り、get_declared_classesは既に使用されているクラスだけを考慮しているため使用できません。

+1

あなたはクラスで何をしますか?ちょうど反復?そして何? – AbraCadaver

+1

[PSR-4](http://www.php-fig.org/psr/psr-4/)オートローダーの使用を検討してください。ディレクトリscrutcureに従ってクラスを名前空間にするときは、例えば、次のようにして繰り返します。 [Reflection](http://php.net/manual/en/reflectionclass.innamespace.php)。 –

+0

@PavelKochだから、 'composer.json'で宣言されたベースディレクトリから始め、そこに含まれるすべてのサブフォルダとファイルを繰り返し、同じ名前のクラスを考えると、 – marcosh

答えて

1

これは、あなたがそれを行うことができる方法である。

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')); 
+0

興味深い解決策です!これはスクリプトとしてうまく動作します。クラスからメソッド呼び出しで同じ結果を取得したい場合は、どのクラスが既に必要かわかりません。 – marcosh

+0

私はあなたの質問に答えるために私の答えを更新しました –

関連する問題