На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
Модераторы: ALXR
  
    > Определить декларацию класса , php
      Требуется в любом файле определить наличие декларации или деклараций классов.
      Пробовал регулярки вроде:
      class(.*?)(extends|implements|{) - глючит, ошибается на HTML коде и строках, вроде: $reflector = new \ReflectionClass($this);
      class([a-zA-Z0-9_\\\s\n\t])*{ - вообще ничего не находит.

      Шаблон такой:
      Вначале "class" (обязательно), затем буквы (обязательно) и символы "_", "\", цифры, пробелы, табы, переносы строки (не обязательно) и наконец символ "{" (обязательно).

      Т.е. должно выдирать все декларации вида:

      Цитата
      Class Ololo{

      Цитата
      class ololo extends asdasd {

      Цитата
      class ololol implements \system\base
      {

      Цитата
      class ololol
      extends \system\base
      {
      Сообщение отредактировано: Serafim -
        ExpandedWrap disabled
          #class(\s+[a-z\\_а-я\s]+\s*){#i
          offtop
          ExpandedWrap disabled
            $tokens = token_get_all(file_get_contents('class.php'));
             
            foreach($tokens as  $tok) {
                    if ($tok[0] == T_CLASS) {
                            var_dump($tok);
                    }
            }
            Сдлал так, вроде всё пашет :)
            ExpandedWrap disabled
              class([a-zA-Z\s]+)([extends|implements]\s+[a-zA-Z0-9\\\s\t\n]*)*{


            Добавлено
            Цитата domencom @
            #class(\s+[a-z\\_а-я\s]+\s*){#i

            А откуда кириллица? о0

            Цитата negram @
            token_get_all

            О как! Офигенная функция, не знал, спасибо :)

            Добавлено
            Пока что вопрос решён
              Цитата Serafim @
              А откуда кириллица? о0
              ещё оффтоп :)
              ExpandedWrap disabled
                <?php
                class вася {
                    function кстроке() {
                        return get_class($this);
                    }
                    function __tostring()
                    {
                        return $this->кстроке();
                    }
                }
                 
                class петя extends вася
                {
                }
                 
                $дима = new петя;
                print($дима."\n"); // петя
              Сообщение отредактировано: negram -
                Цитата negram @
                ещё оффтоп

                етить колотить! о_0

                Добавлено
                Хотя как петя наследует васю - тоже страшно :lol:
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0280 ]   [ 15 queries used ]   [ Generated: 11.05.24, 20:12 GMT ]