У нас работает цикл обхода дерева, который хорошо идентифицирует файлы PHP, но для каждого файла мы запускаем PHP FileReflection
против этого, который требует, чтобы файл включены первый. Для целей этого скрипта нас интересуют только файлы, которые содержат Class
, Interface
или же Function
деклараций.
Есть ли способ определить, содержит ли файл Class
, Interface
или же Function
декларация перед запуском include()
в теме?
Я думаю, что это должно быть регулярное выражение против get_file_contents()
ценность, но я надеялся на более элегантное (читай: последовательное и надежное) решение.
Сам нашел ответ, для интересующихся …
$tokens = token_get_all(file_get_contents($file,TRUE));
$valid = FALSE;
foreach($tokens as $token) {
if (isset($token[0]) && in_array($token[0],array(T_CLASS,T_FUNCTION,T_INTERFACE))) {
$valid = TRUE;
break;
}
}
if (!$valid) { return NULL; }
include_once $file;
$reflection = new FileReflection($file);
...
Других решений пока нет …