Я предпочитаю стандартный подход php автозагрузчика, так как вам вообще не нужно менять свои классы, вы можете использовать ваши стандартные классы без изменений
скажем, например, ваш класс является классом 'Custom_Example_Example2' и хранится в библиотеках
в подпапках вы можете добавить этот автозагрузчик в мастер index.php
убедитесь, что он добавлен ниже определенной константы APPPATH
//autoload custom classes
function __autoload($className) {
if (strlen(strstr($className, 'Custom_')) > 0 ||
strlen(strstr($className, 'Other1_')) > 0 ||
strlen(strstr($className, 'Other2_')) > 0) {
$exp = explode('_', $className);
$file = APPPATH.'libraries';
if(!empty($exp)) {
foreach($exp as $segment) {
$file .= '/'.strtolower($segment);
}
}
$file .= '.php';
require_once $file;
//debug
//echo $file.'<br />';
}
}
Это будет искать вызовы классов, соответствующие префиксу 'Custom_'
и перенаправить их в относительное местоположение в этом случае
вам нужно только определить базовый префикс, а не подпапки / классы
они будут автоматически обнаружены этим кодом
APPPATH.'libraries/custom/example/example2.php'
Вы можете назвать его в контроллере стандартным способом php
$class = new Custom_Example_Example2;
или
$class = new custom_example_example2();
Вы можете изменить скрипт по своему вкусу, в настоящее время он ожидает, что все папки и имена файлов в библиотеке будут строчными, но вы можете удалить функцию strtolower (), чтобы разрешить использование нескольких регистров.
Вы можете изменить требование один раз, чтобы повторить, чтобы проверить вывод, раскомментировав эту строку и обновив страницу, убедитесь, что у вас есть класс init / test в контроллере или модели для запуска теста
echo $file.'<br />';
Спасибо
Daniel