2013-11-28 7 views
0

Проблема, с которой я столкнулась, заключается в том, что spl_autoload($class) передан в обратном вызове spl_autoload_register, не будет загружать имена классов, которые относятся к одному и тому же имени файла, но в разных каталогах.spl_autoload и те же имена файлов в разных каталогах

То, что я хочу достичь использует spl_autoload, не используя require и без пространств имен, чтобы загрузить автоматически следующие классы:

% project_path%/контроллеры/test.php:

class TestController { 

} 

% project_path% /models/test.php:

class TestModel { 

} 

Что я делаю замены Controller или Model Suff ix в имени класса с пустой строкой, поэтому он получит имя файла class Test с нижним регистром - test, а добавление расширения расширения php должно перейти на test.php.

В начале файла я установил путь включения для ссылки на pear, в текущий каталог, на models и на controllers.

Если есть вопрос, что я пробовал - вот что я пробовал :) spl_autoload() не получает пути, поэтому мне нужно изменить путь включения, чтобы включить файлы.

мне удалось добиться его с требует и явный пути, то имя класса, но я был в сомнении, если это возможно с spl_autoload после текущего шаблона, без изменения имени файла, имени класса или добавления имен

ответ

0

вы можете попробовать функция как файл: XProject.class.php:

class XProject{ 
    public static function autoload($class) { 
     //echo '>> auto load >'.$class.'<br>'; 

     if (file_exists(BASEPATH . 'core/lib/' . $class . '.class.php')) { 
      require_once(BASEPATH . 'core/lib/' . $class . '.class.php'); 
     } elseif (file_exists(BASEPATH . 'core/utils/' . $class . '.class.php')) { 
      require_once(BASEPATH . 'core/utils/' . $class . '.class.php'); 
     } 
    } 
} 

и:

include BASEPATH.'core/lib/XProject.class.php'; 
spl_autoload_register('XProject::autoload'); 

Inthis примера я Suppo sed% Project_Path% как BASEPATH. Надеюсь, этот код вам поможет.

+0

Ваша функция использует 'require' вместо' spl_autoload' –

+0

в этом коде для «spl_autoload_register» – Mimouni

+0

Вы меня не поняли. Еще раз проверьте мое первое предложение в вопросе. В spl_autoload_register я передаю обратный вызов все, что необходимо для создания реального имени файла $ class, а затем передать его в spl_autoload(). Нет require/include/require_once –

Смежные вопросы