Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

наличие класса в файле php

#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);

Комментариев нет:

Отправить комментарий