Приветствую, господа. В процессе работы сталкивался с различными способами подключения собственных классов.
Выделяют 2 основных способа:
1) Подключение на уровне php с помощью spl_autoload_register(...)
Пример:
2) Подключение на уровне ядра с помощью Loader::registerAutoLoadClasses(...) (CModule::AddAutoloadClasses(...))
Пример:
Как я понимаю, разница в том, что spl_autoload_register подключает класс динамически, на основе имени, а Loader::registerAutoLoadClasses требует прописать явно класс и путь до файла.
Хотелось бы выяснить какой способ предпочтителен, их плюсы и минусы. Жду Ваших комментарий, коллеги. Возможно вы предложите альтернативные варианты.
P.S. Замечал, что при spl_autoload_register как-то не сразу новый класс подключает (может, конечно, я что-то не так делал), но метод класса зачастую начинают работать спустя какое-то время...
Выделяют 2 основных способа:
1) Подключение на уровне php с помощью spl_autoload_register(...)
Пример:
spl_autoload_register(function($className) { $filePath = Application::getInstance()->getContext()->getServer()->getDocumentRoot() . '/local/php_interface/lib/classes/'; $filePath .= ToLower($className); $filePath = str_replace('\\', '/', $filePath); $filePath .= '.php'; if(file_exists($filePath)){ include_once $filePath; } }); |
2) Подключение на уровне ядра с помощью Loader::registerAutoLoadClasses(...) (CModule::AddAutoloadClasses(...))
Пример:
CModule::AddAutoloadClasses( '', // не указываем имя модуля array( // ключ - имя класса, значение - путь относительно корня сайта к файлу с классом 'CMyClassName1' => '/path/cmyclassname1file.php', 'CMyClassName2' => '/path/cmyclassname2file.php', ) ); |
Как я понимаю, разница в том, что spl_autoload_register подключает класс динамически, на основе имени, а Loader::registerAutoLoadClasses требует прописать явно класс и путь до файла.
Хотелось бы выяснить какой способ предпочтителен, их плюсы и минусы. Жду Ваших комментарий, коллеги. Возможно вы предложите альтернативные варианты.
P.S. Замечал, что при spl_autoload_register как-то не сразу новый класс подключает (может, конечно, я что-то не так делал), но метод класса зачастую начинают работать спустя какое-то время...