За последние 24 часа нас посетили 24070 программистов и 1656 роботов. Сейчас ищут 830 программистов ...

spl_autoload

Тема в разделе "Прочие вопросы по PHP", создана пользователем immortal.1986, 2 дек 2014.

  1. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Вопрос! есть код!
    init.php
    Код (PHP):
    1. spl_autoload_register('initAutoLoad');
    2. function initAutoLoad($class){
    3.                 include_once 'class'. DS . $class . EXT;
    4. }
    5. spl_autoload_register('worksAutoLoad');
    6. function worksAutoLoad($class){
    7.         include_once 'class'. DS . 'abstract' . DS . $class . EXT;
    8. }
    9.  
    10.  
    11. index.php
    12.  
    13. $a = new User();
    14. $a->getName();
    Соответственно в папке class есть класс User, а в папке class/abstract класс Auser

    все вроде отрабатывает но выкидывает ВОРНИНГ так как 1 загрузчик не может подключить class/Auser
    как то не получиться избавиться от ошибки!
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    какой ворнинг?
     
  3. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Warning: include_once(class\Auser.php) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in Z:\home\localhost\www\register\conf\init.php on line 13
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну все правильно. создан стек автозагрузки. вызывается неизвестный класс. автозагрузчик обращается к стеку функций автозагрузки. первая в стеке функция билдит свой вариант расположения класса и жестко его грузит. поскольку файла там нет то инклюд высыпается ворнингом.

    невероятно простое "решение" данной проблемы это одно из трех:
    - единственный автозагрузчик
    - проверка существования файла (ну это при любом кол-ве загрзучиков)
    - жесткое кодирование подключения нужных файлов
     
  5. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    единственный автозагрузчик - не интересно так как хочеться делать папки в папках итд!
    проверка существования файла
    Код (PHP):
    1. function initAutoLoad($class){
    2.         if(file_exists("class/$class")){
    3.         include_once 'class'. DS . $class . EXT;
    4.         }
    5. } 
    не работает Fatal error: Class 'Db_ext' not found
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты вардапм пути к классу сделай ради смеху.
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719