Класс существует во внешнем файле

Как проверить внешний файл для класса?

Я пытаюсь установить функцию установки для своих модулей, поэтому я пытаюсь загрузить ее, чтобы загрузить список каталогов, а затем проверить, есть ли в файле модуля метод, называемый install. Поэтому в списке будут отображаться только модули с этим методом.

Вот мой код:

$output .= '<div id="module-dialog" title="Add Widget"><form id="widget-list" name="widget-list"> <select name="widgets" size="12" id="widgets-list">'; $dirHandler = opendir('modules') or die ("Could not open module folder"); while ($dir = readdir($dirHandler)) { if($dir!="." && $dir!=".."){ // Code to filter out modules with install class -- goes here $output .='<option>'.$dir.'</option>'; } } $output .='</select></form></div>'; 

Имя файла модуля совпадает с именем каталога. example: папка: Admin, файл: Admin.php

Если этого не сделать, я думаю, я создам отдельный файл только для функции установки.

Я предполагаю, что вы имеете в виду «Как узнать, определяет ли файл PHP определенный класс?»

Если вы можете включить каждый PHP-файл, который хотите проанализировать

это просто: просто сравните результаты get_declared_classes() до и после включения:

 $before = get_declared_classes(); include "myfile.php"; $after = get_declared_classes(); $new_classes = array_diff($before, $after); print_r($new_classes); // Outputs all classes defined in myfile.php 

Если вы не можете включить файлы PHP (например, потому что они имеют одно и то же имя класса)

Это более сложно. Если вы хотите сделать это правильно, функции токенизатора могут анализировать файл на уровне парсера PHP. Запустите token_get_all () в вашем файле, чтобы узнать, какой из них искать.

Если ваши классы следуют простому соглашению, достаточно просто проверить «class classname» с использованием обычного выражения.