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