В Eaze классы разбиты по пакетам. Рассмотрим структуру пакета:
При загрузке классов есть два режима работы - обычный и с компиляцией пакетов. Обычный режим предполагает собой require по файлам. Используется при разработке. Режим с компиляцией пакетов предполагает объединение файлов в пакете в один файл. Используется в production.
В версии 1.2 необходимо использовать ручную загрузку пакетов через:
Package::Load( '<Project>.<Package>') Package::Load( '<Project>.<Package>/<SubPackage>')
Пакеты, необходимые для работы фреймворка, и пакеты, классы которых используются в сессии, должны быть загружены через Package::Load() в eaze.php
В обычном режиме Package::Load( '<Project>.<Package>') сканирует директорию lib/<Project>.<Package> и загружает все php-файлы, которые лежат в этой директории (без вложенных директорий).
В режиме компиляции пакетов происходит следующее: если отсутствует файл cache/compiled.eaze (а при каждой выливке он удаляется), то Package.php сканирует директории lib/*/* (кроме actions) и создает файлы cache/<Project>.<Package>.php или cache/<Project>.<Package>.<SubPackage>.php, в которых находятся все файлы из пакета (в порядке, описанном в .include-order).
Package::Load( '<Project>.<Package>') делает require файла cache/<Project>.<Package>.php. Таким образом, получается меньшее количество обращений к файлам, чем в обычном режиме.
Важно! При использовании сторонних библиотек нужно помнить, что include/require будут работать относительно папки cache, а не относительно папки lib/<Project>.<Package>.
Использование неймспейсов не рекомендуется.
В версии 1.3 подключение классов происходит через автозагрузку классов (spl_autoload_register). Надобности в Package::Load() больше нет. Теперь в eaze.php обязательно требуется загружать только те классы, в которых есть константы через define, например:
Package::LoadClasses( 'Convert', 'DateTimeWrapper', 'IFactory' );
В этой версии можно использовать неймспейсы через {}.
При каждом обращении Package.php строит карту классов, расположенных в lib/*/* (кроме actions), и при любом обращении к классу, который не загружен, происходит include этого класса.
В этом режиме файлы в папке cache разделены не по пакетам, а по uri. Есть package_system.php, в котором находятся классы до момента вызова функции Package::BeginUri( $uri ), и package_md5(uri).php, где находятся все классы, которые используются после BeginUri (вызывается в Page.php). Таким образом мы загружаем только те классы, которые реально используются на странице.
Файл cache/compiled.eaze отвечает за сброс кэша. Файл cache/classmap.json отвечает за карту используемых классов (создается в процессе работы).