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

Поиск и подключение файлов классов в Yii реализовано при помощи автозагрузки классов. Фреймворк предоставляет свой быстрый совместимый с PSR-4 автозагрузчик, который устанавливается в момент подключения `Yii.php`.

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

## Как использовать автозагрузчик Yii ¶

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

- Каждый класс должен принадлежать пространству имён (то есть `foo\bar\MyClass`).
- Каждый класс должен находиться в отдельном файле, путь к которому определятся следующим правилом:

    // $className — это абсолютное имя класса без начального "\"
    $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');

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

При использовании шаблона приложения basic вы можете хранить свои классы в пространстве имён `app`. В этом случае они будут загружаться автоматически без создания нового псевдонима. Это работает потому как `@app` является заранее определённым псевдонимом и такое имя класса как `app\components\MyClass` в соответствии с описанным выше алгоритмом преобразуется в путь `директорияПриложения/components/MyClass.php`.

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

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

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

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

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

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

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

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

При использовании дополнительных автозагрузчиков файл `Yii.php` должен быть подключен после их установки. Это позволит автозагрузчику Yii первым пробовать загрузить класс. К примеру, приведённый ниже код взят из входного скрипта шаблона приложения basic. Первая строка устанавливает автозагрузчик 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.

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