====== Автозагрузка классов (Package.php) ====== ===== Описание работы ===== В Eaze классы разбиты по пакетам. Рассмотрим структуру пакета: * lib * **.** - Пакет с классами, экшенами, xml-описанием и подпакетами (без вложенности). * actions - папка с экшенами. Может быть любое количество вложенных папок. * * .php * .php * .php * .php * .php * [[eaze:actions.xml|..xml]] * Правило именования файлов: Имя файла = Имя класса.php. * Использование неймспейсов допускается только в {}. При загрузке классов есть два режима работы - обычный и с компиляцией пакетов. //Обычный режим// предполагает собой require по файлам. Используется при разработке. Режим //с компиляцией пакетов// предполагает объединение файлов в пакете в один файл. Используется в production. ===== Eaze v1.2 ===== В версии 1.2 необходимо использовать ручную загрузку пакетов через: Package::Load( '.') Package::Load( './') Пакеты, необходимые для работы фреймворка, и пакеты, классы которых используются в сессии, должны быть загружены через Package::Load() в eaze.php ==== Обычный режим ==== В обычном режиме ''Package::Load( '.')'' сканирует директорию ''lib/.'' и загружает все php-файлы, которые лежат в этой директории (без вложенных директорий). ==== Режим с компиляцией пакетов ==== В режиме компиляции пакетов происходит следующее: если отсутствует файл ''cache/compiled.eaze'' (а при каждой выливке он удаляется), то Package.php сканирует директории ''lib/*/* '' (кроме actions) и создает файлы ''cache/..php'' или ''cache/...php'', в которых находятся все файлы из пакета (в порядке, описанном в .include-order). ''Package::Load( '.')'' делает require файла ''cache/..php''. Таким образом, получается меньшее количество обращений к файлам, чем в обычном режиме. __Важно!__ При использовании сторонних библиотек нужно помнить, что include/require будут работать относительно папки ''cache'', а не относительно папки ''lib/.''. Использование неймспейсов не рекомендуется. ===== Eaze v1.3 ===== В версии 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'' отвечает за карту используемых классов (создается в процессе работы).