Интересным моментом является то, что автозагрузчик проекта Habari делает кешированием всего списка файлов классов в памяти, чтобы он не выполнял поиск файлов на диске при каждом запросе класса.
По сути, вы объявляете статическое внутри вашего __autoload()
, которое содержит массив всех файлов классов, проиндексированных классом, который заставит их загружаться. Например, код будет использовать Dir или glob()
для генерации этого статического массива:
$class_files = array(
'user' => '/var/www/htdocs/system/classes/user.class.php',
);
Затем вы просто включаете $class_files[$class]
, чтобы получить правильный файл. Это хорошо и быстро, потому что он получает каталог с диска сразу, а не генерирует список или ищет определенное имя файла каждый раз, когда ссылается на новый класс. (Вы будете удивлены, насколько сильно разница в скорости.)
Если имя класса не является ключом в массиве, вы можете выдать пользовательское исключение или сгенерировать класс заглушки / макета для возврата. Кроме того, если вы посмотрите на системный автозагрузчик Habari, вы увидите, что Habari реализует __static()
в автоматически загружаемых классах, что походит на конструктор для статических классов.
include_once()
следует избегать, и оператор @
не требуется, если вы проверили наличие файла для включения.