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

317
01 августа 2017, 18:42

Как проверить существует ли класс в файле?

Этим кодом я выбираю все файлы:

$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__;
            }
        }
    }
}

В этом же цикле хочу проверять в каждом файле существует ли класс (любой, не какой-то определенный) и выводить его название, если он существует.

Answer 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;
    }
}

Более развернутый пример поиска класса(с пространством имен) в файле можете посмотреть у меня в проекте на гитхабе

Answer 2

Можно парсить каждый файл и проверять следующим образом, есть ли в нем классы. Наверно это костыль, но рабочий:

<?php
 $data = file_get_contents('file.php');
 preg_match_all('/class [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $data, $matches);
 if (!empty($matches[0])) {
     foreach ($matches[0] as $val) {
         var_dump(substr($val, 6));
     }
 }
Answer 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 <b>'.$className.'</b> dont exist';
        }
    }
}
print_r($arrayLibs);
READ ALSO
Рейтинг пользователей по баллам

Рейтинг пользователей по баллам

Как, в MySql реализовать рейтинг пользователей по баллам: Есть таблица, table(user_id, score)Известен id пользователя, нужно узнать на каком он месте среди...

284
можно ли перенаправить на главную ,если пользователь набирает в url путь к файлу(папке)?

можно ли перенаправить на главную ,если пользователь набирает в url путь к файлу(папке)?

Такой вопрос: например, какой-нибудь умник хочет ввести именно путь к файлу (например, не sie/category ,а site/views/category/indexphp), могу ли я распознать это...

304