Приветствую, господа. В процессе работы сталкивался с различными способами подключения собственных классов.
Выделяют 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 как-то не сразу новый класс подключает (может, конечно, я что-то не так делал), но метод класса зачастую начинают работать спустя какое-то время...