4

私がやろうとしているのは、特定の基本クラスを拡張するすべてのサブクラスを見つけることです。

これはhttps://stackoverflow.com/a/436204/1369417とよく似ていますが、関数が呼び出されたときにクラスがロードされない点が異なります。

基本的に、私がやりたいことは次のとおりです。

  1. ディレクトリにすべての PHP ファイルを含めます。
  2. 各インクルードが基本クラスの新しいサブクラスを導入したかどうかをテストします。

しかし、PHP ファイルをインクルードすることによって発生する可能性のあるエラーや警告から保護されるように、隔離された PHP 環境でインクルードを実行したいと考えています。

以下に小さな例を示します。

BaseClass.php

<?php
abstract class BaseClass {}
?>

FirstSubclass.php

<?php
class FirstSubclass extends BaseClass {}
?>

Blah.php

<?php
class SecondSubclass extends BaseClass {}
?>

悪いコード.php

<?php
adfgklmdflgksdfge@#4234t0q3
?>

main.php

<?php
require('BaseClass.php');
print_r(find_subclasses(BaseClass));
?>

期待される出力

Array (
    [FirstSubclass.php] => FirstSubclass,
    [Blah.php] => SecondSubclass,
)
4

2 に答える 2

2

この関数を使用する

function getSubclassesOf($parent) {
    $result = array();
    foreach (get_declared_classes() as $class) {
        if (is_subclass_of($class, $parent))
            $result[] = $class;
    }
}

PHPでクラスのすべてのサブクラスを取得する方法から

于 2013-02-20T06:28:21.627 に答える
0

おそらく最も簡単な方法は、ファイルをインクルードする代わりにファイルを読み取り、クラス定義と継承を探すために自分で簡単な解析を行うことです。その後、サブクラスと基本クラスを照会できる継承階層を構築するのは非常に簡単です。

于 2013-02-20T06:37:59.387 に答える