Инструменты пользователя

Инструменты сайта


eaze:автозагрузка_классов

Это старая версия документа.


Автозагрузка классов (Package.php)

Описание работы

В Eaze классы разбиты по пакетам. Рассмотрим структуру пакета:

  • lib
    • <Project>.<Package> - Пакет с классами, экшенами, xml-описанием и подпакетами (без вложенности).
      • actions - папка с экшенами. Может быть любое количество вложенных папок.
      • <Additional SubPackage>
        • <SubClass1>.php
        • <SubClass2>.php
      • <Class1>.php
      • <Class2>.php
      • <Class3>.php
  • Правило именования файлов: Имя файла = Имя класса.php.
  • Использование неймспейсов допускается только в {}.

При загрузке классов есть два режима работы - обычный и с компиляцией пакетов. Обычный режим предполагает собой require по файлам. Используется при разработке. Режим с компиляцией пакетов предполагает объединение файлов в пакете в один файл. Используется в production.

Eaze v1.2

В версии 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>.

Использование неймспейсов не рекомендуется.

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

eaze/автозагрузка_классов.1360697016.txt.gz · Последние изменения: 2013/02/12 23:23 — sergeyfast