Сделать нормальную автозагрузку классов через API

Рейтинг: 0.1033  
Внедрено
Предложил Пользователь 17890 01.08.2013 07:21:02

Сделать нормальную автозагрузку классов через API

Сделать возможность писать свои автопогрузчики классов, либо стандартизировать эту операцию.

Выходит, что сейчас максимум что можно - это сделать автозагрузку в рамках своего модуля, как описано в блоге. А если мне не нужен модуль? А если мне нужна некая своя "библиотека классов", которые я, допустим, в компонентах дергаю? Мне все время include необходимого класса писать в init.php? Хочется по-людски управлять этим процессом...

Я делал следующий хак: подрубал файл в dbconn.php и переопределял функцию __autoload(). (До того, как битрикс эту функцию "захавает" под себя).
Это все под PHP 5.3 было. Хака, чтобы использовать spl_autoload_register() я не нашел.

Что я предлагаю, и что было бы удобно:
некий способ, который позволит повесить событие и указать свой обработчик автозагрузки. При этом система битрикс будет искать неопределенный класс используя этот произвольный обработчик.

Сейчас с этим полный "баян", а хочется что-то хорошее...

Рейтинг: 0.1008  
Пользователь 11948 01.08.2013 09:02:20
Валерий, если я правильно понял вашу проблему, достаточно НЕ указывать модуль для автолоада - и все будет работать.
http://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=2916 (ctrl+f по __autoload)
Рейтинг: 0  
Пользователь 17890 04.08.2013 06:35:37
Антон, спасибо.
это то, что нужно.
Рейтинг: 0  
Пользователь 17890 26.08.2013 00:24:59
Кстати, в битриксе функция __autoload определена тут:
bitrix\modules\main\classes\general\module.php

// register autoload
if (!function_exists("__autoload"))
{
   if (function_exists('spl_autoload_register'))
   {
      spl_autoload_register(array('CModule', 'RequireAutoloadClass'));
   }
   else
   {
      function __autoload($className)
      {
         CModule::RequireAutoloadClass($className);
      }
   }

   define("NO_BITRIX_AUTOLOAD", false);
}
else
{
   define("NO_BITRIX_AUTOLOAD", true);
} 
А константа
NO_BITRIX_AUTOLOAD
определяет, есть ли возможность использовать автозагрузку для классов - или нет. Это видать исторический хвост, т.к. начиная с php 5.3  автозагрузка всегда есть.