У нас есть цикл цикла обхода дерева, который хорошо идентифицирует файлы 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);...