Как проверить внешний файл для класса?
Я пытаюсь установить функцию установки для своих модулей, поэтому я пытаюсь загрузить ее, чтобы загрузить список каталогов, а затем проверить, есть ли в файле модуля метод, называемый 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» с использованием обычного выражения.