#php
Как проверить существует ли класс в файле? Этим кодом я выбираю все файлы: $dir = WWW.'/libs'; $arrayLibs = array(); if($handle = opendir($dir)){ while(false !== ($file = readdir($handle))) { if($file != "." && $file != ".."){ //$arrayLibs[] = $file; if (class_exists($file)) { $arrayLibs[] = __CLASS__; } } } } В этом же цикле хочу проверять в каждом файле существует ли класс (любой, не какой-то определенный) и выводить его название, если он существует.
Ответы
Ответ 1
Самый надежный вариант - использовать token_get_all Как-то так: $tokens = token_get_all(file_get_contents(file)); $classStart = false; foreach ($tokens as $token) { if ($token[0] === T_CLASS) { $classStart = true; } if ($classStart && $token[0] === T_STRING) { $class = $token[1]; break; } } Более развернутый пример поиска класса(с пространством имен) в файле можете посмотреть у меня в проекте на гитхабеОтвет 2
Можно парсить каждый файл и проверять следующим образом, есть ли в нем классы. Наверно это костыль, но рабочий:Ответ 3
я сдела таким образом, он отрабаывает прекрастно: $dir = WWW.'/libs'; $arrayLibs = array(); if($handle = opendir($dir)){ while(false !== ($file = readdir($handle))) { if($file != "." && $file != ".."){ $className = substr($file, 0, -4); require_once $dir.'/'.$file; if (class_exists($className)) $arrayLibs[] = 'Class name: '.$className; else $arrayLibs[] = 'Class '.$className.' dont exist'; } } } print_r($arrayLibs);
Комментариев нет:
Отправить комментарий