Spec-Zone.ru › Yii 2.0

Класс Автозагрузка

  1. Использование автозагрузчика Yii
  2. Карта классов
  3. Использование других автозагрузчиков
  4. Автозагрузка классов расширений

Yii полагается на механизм автозагрузки классов, чтобы находить и включать все необходимые файлы классов. Он предоставляет высокопроизводительный автозагрузчик классов, совместимый со стандартом PSR-4. Автозагрузчик устанавливается при включении файла Yii.php.

Примечание: Для простоты описания в этом разделе мы будем говорить только об автозагрузке классов. Однако имейте в виду, что описанное здесь содержимое также относится к автозагрузке интерфейсов и трейтов.

Использование автозагрузчика Yii

Для использования автозагрузчика Yii вам необходимо следовать двум простым правилам при создании и именовании ваших классов:

  • Каждый класс должен находиться в пространстве имён namespace (например, foo\bar\MyClass)
  • Каждый класс должен быть сохранён в отдельном файле, путь к которому определяется по следующему алгоритму:
// $className is a fully qualified class name without the leading backslash
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');

Например, если имя класса и пространство имён составляют foo\bar\MyClass, псевдоним для соответствующего пути к файлу класса будет @foo/bar/MyClass.php. Для разрешения этого псевдонима в путь к файлу, либо @foo, либо @foo/bar должен быть корневым псевдонимом.

При использовании Шаблона базового проекта, вы можете разместить ваши классы в верхнем уровне пространства имён app, чтобы они могли быть загружены автозагрузчиком Yii без необходимости определения нового псевдонима. Это потому, что @app является предварительно определённым псевдонимом, а имя класса, например, app\components\MyClass, может быть разрешено в файл класса AppBasePath/components/MyClass.php, согласно только что описанному алгоритму.

В Шаблоне продвинутого проекта каждый уровень имеет свой корневой псевдоним. Например, уровень переднего плана имеет корневой псевдоним @frontend, а уровень заднего плана — @backend. В результате вы можете разместить классы переднего плана в пространстве имён frontend, а классы заднего плана — в backend. Это позволит загрузить эти классы автозагрузчиком Yii.

Чтобы добавить пользовательское пространство имён в автозагрузчик, вам необходимо определить псевдоним для базового каталога пространства имён с помощью Yii::setAlias(). Например, чтобы загрузить классы в пространстве имён foo, которые находятся в каталоге path/to/foo, вы вызовете Yii::setAlias('@foo', 'path/to/foo').

Карта классов

Автозагрузчик Yii поддерживает функцию карты классов, которая сопоставляет имена классов с соответствующими путями к файлам классов. Когда автозагрузчик загружает класс, он сначала проверяет, найден ли класс в карте. Если да, соответствующий путь к файлу будет включён напрямую без дополнительных проверок. Это делает автозагрузку классов невероятно быстрой. Фактически, все базовые классы Yii загружаются таким образом.

Вы можете добавить класс в карту классов, хранящуюся в Yii::$classMap, используя:

Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';

Псевдонимы могут использоваться для указания путей к файлам классов. Вы должны установить карту классов в процессе инициализации, чтобы карта была готова до использования ваших классов.

Использование других автозагрузчиков

Поскольку Yii использует Composer в качестве менеджера зависимостей пакетов, рекомендуется также установить автозагрузчик Composer. Если вы используете сторонние библиотеки, имеющие свои собственные автозагрузчики, вам также следует установить их.

При использовании автозагрузчика Yii вместе с другими автозагрузчиками, вы должны включить файл Yii.php после установки всех остальных автозагрузчиков. Это сделает автозагрузчик Yii первым, кто будет отвечать на любые запросы автозагрузки классов. Например, следующий код взят из скрипта входа входа Шаблона базового проекта. Первая строка устанавливает автозагрузчик Composer, а вторая — автозагрузчик Yii:

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

Вы можете использовать автозагрузчик Composer в одиночку без автозагрузчика Yii. Однако при этом производительность вашей автозагрузки классов может снизиться, и вам нужно будет следовать правилам, установленным Composer, чтобы ваши классы можно было загружать.

Информация: Если вы не хотите использовать автозагрузчик Yii, вы должны создать свой собственный вариант файла Yii.php и включить его в свой скрипт входа входа.

Автозагрузка классов расширений

Автозагрузчик Yii способен автозагружать классы расширений. Единственное требование состоит в том, чтобы расширение корректно указывало раздел autoload в файле composer.json. Обратитесь к документации Composer для получения дополнительной информации об указании autoload.

В случае, если вы не используете автозагрузчик Yii, автозагрузчик Composer всё ещё может автозагрузить для вас классы расширений.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-concept-autoloading.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API