php - 扩展给定类的所有类的列表

时间:2014-07-11 16:00:44

标签: php inheritance

我正在构建一个小cms,我想知道哪个是最好的方法。

假设我有类myClassAmyClassBmyClassC,...扩展给定的类myClass

我需要一个函数来列出扩展MyClass*的所有类MyClass。是否有一种简单而安全的方法可以使用PHP执行此操作,或者我应该将列表保留在其他位置(可能是数据库中的表)?

我希望这个问题足够清楚......

1 个答案:

答案 0 :(得分:1)

我会使用scandir(C:// .... / [带文件的目录]);获取包含所选目录中所有文件和文件夹的数组。

然后我会删除'。'和' ..'因为这些是用于目录的导航。 然后在foreach()循环中使用if(!is_dir($ single_item))来获取所有不属于目录的文件。在此之后,您有一个文件和目录列表。然后我会删除目录导航'。'和' ..'来自阵列。

然后和以前一样,我会使用file_get_contents()读取文件的内容,然后使用[space]爆炸的explode()拆分单词。然后我会使用正则表达式' ~MyClass [A-Za-z0-9]〜' (或其他适用的表达式)使用preg_match()并将所有匹配存储在数组中。我最后会使用array_filter()来过滤这些,以获得您可以使用的唯一列表

//directory to scan
$dir = "C:\ ...\[directory you want]";

//scan root directory for files
$root = scandir($dir);

//delete directory listings from array (directory navigation)
$disallowed_values = array(".", "..");
foreach($disallowed_values as $disallowed)
{
    if(($key = array_search($disallowed, $root)) !== false)
    {
        unset($root[$key]);
    }
}

//if array is not empty (no files / folders found)
if(! empty($root))
{
    //empty array for items you want found.
    $class_array = array();

    //for each directory
    foreach($root as $item)
    {
        if(! is_dir("$dir" . DIRECTORY_SEPARATOR . "$item"))
        {
            //get file contents
            $file_content = file_get_contents("$dir" . DIRECTORY_SEPARATOR . "$item");

            //pattern to search for
            $pattern = "~MyClass[A-Za-z0-9]*~";

            //create array with results for single file
            preg_match_all($pattern, $file_content, $result);

            //use $result to populate class_array(); use print_r($result); to check what it is outputting (based on your file's structures)
        }
    }
}

//get unique items from array_filter - remove duplicates
$class_array = array_filter($class_array);

//use array of items however you like