Автозавантаження класів
=================
Пошук і підключення файлів класів в Yii реалізовано за допомогою
[автозавантаження класів](http://www.php.net/manual/ru/language.oop5.autoload.php). Фреймворк надає свій швидкий сумісний з [PSR-4](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md)
автозавантажувач, який встановлюється в момент підключення `Yii.php`.

> Примітка: Для простоти оповіді, в цьому розділі ми будемо говорити тільки про автозавантаження класів. Тим не менш, все описане застосовно до інтерфейсів і трейтам.

Як використовувати автозавантажувач Yii <a name="using-yii-autoloader"></a>
--------------------------------------------------------------

При використанні автозавантажувач класів Yii слід дотримуватися два простих правила створення і іменування класів:

* Кожен клас повинен належати простору імен (тобто `foo\bar\MyClass`).
* Кожен клас повинен знаходитися в окремому файлі, шлях до якого визначаться наступним правилом:

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

Наприклад, якщо абсолютне ім'я класу `foo\bar\MyClass`, то [псевдонім шляху](concept-aliases.md) даного файлу буде
`@foo/bar/MyClass.php`. Для того, щоб даний псевдонім можна було перетворити в шлях до файлу, необхідно щоб або `@foo` або `@foo/bar` був [кореневим псевдонімом](concept-aliases.md#defining-aliases).

при використанні [шаблону додатку basic](start-basic.md) ви можете зберігати свої класи в просторі імен `app`.
В цьому випадку вони будуть завантажуватися автоматично без створення нового псевдоніма. Це працює тому як `@app`
є [заздалегідь певним псевдонімом](concept-aliases.md#predefined-aliases) і таке ім'я класу як
`app\components\MyClass` відповідно до описаного вище алготімом перетвориться в шлях
`директорияПриложения/components/MyClass.php`.

В [шаблоне приложения advanced](tutorial-advanced-app.md) кожен рівень додатку володіє власним кореневим псевдонімом. Наприклад, для frontend кореневим псевдонімом є `@frontend`, а для backend — `@backend`. Це дозволяє
розмістити класи frontend в простір імен `frontend`, а класи backend в простір імен `backend`. При цьому класи будуть завантажені автоматично.


Карта классов <a name="class-map"></a>
---------------------------------

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

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

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

Для указания путей к файлам классов можно использовать [псевдонимы](concept-aliases.md). Карту классов необходимо
сформировать в процессе [первоначальной загрузки](runtime-bootstrapping.md) так как она должна быть готова до
использования классов.


Использование других автозагрузчиков <a name="using-other-autoloaders"></a>
------------------------------------------------------------------

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

При использовании дополнительных автозагрузчиков файл `Yii.php` должен быть подключен *после* их установки. Это позволит
автозагрузчику Yii первым пробовать загрузить класс. К примеру, приведённый ниже код взят из
[входного скрипта](structure-entry-scripts.md) [шаблона приложения basic](start-basic.md). Первая строка устанавливает
автозагрузчик Composer, а вторая — автозагрузчик Yii:

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

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

> Информация: Если вы не хотите использовать автозагрузчик Yii, создайте свою версию файла `Yii.php`
  и подключите его в [входном скрипте](structure-entry-scripts.md).


Автозагрузка классов расширений <a name="autoloading-extension-classes"></a>
-------------------------------------------------------------------

Автозагрузчик Yii может автоматически загружать классы [расширений](structure-extensions.md) в том случае, если соблюдается
единственное правило. Расширение должно правильно описать раздел 'autoload' в файле 'composer.json'. Более подробно об
этом можно узнать из [официальной документации Composer](https://getcomposer.org/doc/04-schema.md#autoload).

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