# Autoładowanie klas ¶

Yii opiera się na mechanizmie automatycznego ładowania klas służącym do zlokalizowania i dołączenia wszystkich wymaganych plików klas. Wbudowany wysoce wydajny autoloader klas, zgodny ze standardem PSR-4, jest instalowany po załączeniu pliku `Yii.php`.

> Uwaga: Dla uproszczenia opisów, w tej sekcji zostanie omówione jedynie autoładowanie klas. Należy mieć jednak na uwadze, że poniższe informacje odnoszą się również do autoładowania interfejsów i traitów.

## Korzystanie z autoloadera Yii ¶

Aby skorzystać z autoloadera klas Yii, powinieneś przestrzegać dwóch prostych zasad tworzenia i nazywania własnych klas:

- Każda klasa musi znajdować się w przestrzeni nazw (np. `foo\bar\MyClass`)
- Każda klasa musi być zapisana jako oddzielny plik, do którego ścieżka określona jest poniższym algorytmem:

    // $className jest w pełni uściśloną nazwą klasy bez początkowego odwrotnego ukośnika
    $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');

Przykładowo, jeśli nazwa klasy i przestrzeń nazw to `foo\bar\MyClass`, odpowiadającym ścieżce pliku klasy aliasem jest `@foo/bar/MyClass.php`. Aby ten alias mógł być przetłumaczony na ścieżkę pliku, `@foo` lub `@foo/bar` musi być aliasem bazowym.

Używając podstawowego szablonu projektu, możesz umieścić swoje klasy w bazowej przestrzeni nazw `app`, dzięki czemu mogą być autoładowane przez Yii bez potrzeby definiowania nowego aliasu. Dzieje się tak dzięki temu, że `@app` jest predefiniowanym aliasem i klasa `app\components\MyClass` może być odszukana w pliku `AppBasePath/components/MyClass.php`, zgodnie z opisanym algorytmem.

W zaawansowanym szablonie projektu każdy poziom aplikacji posiada swój własny bazowy alias. Dla przykładu, front-end określony jest przez bazowy alias `@frontend`, a back-end - `@backend`. Dzięki temu możesz umieścić klasy front-endu w przestrzeni nazw `frontend`, a klasy back-endu w przestrzeni nazw `backend`. Wszystkie te klasy będą automatycznie załadowane przez autoloader Yii.

## Mapa klas ¶

Autoloader klas Yii wspiera mechanizm mapy klas, która mapuje nazwy klas do odpowiadających im ścieżek plików. Kiedy autoloader ładuje klasę, najpierw sprawdza czy klasa znajduje się w mapie. Jeśli tak, odpowiadająca nazwie ścieżka pliku zostanie dołączona od razu, bez dalszej weryfikacji, co jest powodem, dla którego autoładowanie klas jest błyskawiczne. Wszystkie podstawowe klasy Yii są autoładowane właśnie w ten sposób.

Możesz dodać klasę do mapy klas, przechowywanej w `Yii::$classMap`, za pomocą instrukcji:

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

Do określenia ścieżek plików klas można użyć aliasów. Zapisywanie mapy klas powinno odbywać się w procesie bootstrappingu, aby mapa była gotowa zanim rozpocznie się korzystanie z klas.

## Korzystanie z innych autoloaderów ¶

Ponieważ Yii opiera się głównie na composerze, jako menedżerze pakietów zależności, zalecane jest również zainstalowanie autoloadera composera. Jeśli używasz zewnętrznych bibliotek, korzystających z własnych autoloaderów, powinieneś również je zainstalować.

Używając autoloadera Yii razem z innymi autoloaderami, powinieneś dołączyć plik `Yii.php` po wszystkich pozostałych autoloaderach. Dzięki temu autoloader Yii jako pierwszy odpowie na żądanie autoładowania klasy. Dla przykładu, poniższy kod znajduje się w skrypcie wejściowym podstawowego szablonu projektu. Pierwsza linia jest instrukcją instalacji autoloadera composera, a druga instaluje autoloader Yii:

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

Możesz używać jedynie autoloadera composera bez autoloadera Yii, ale wydajność autoładowania klas może być wtedy obniżona i, dodatkowo, musisz przestrzegać zasad ustalonych przez composera, aby Twoje klasy mogły być autoładowane.

> Informacja: Jeśli nie chcesz korzystać z autoloadera Yii, musisz stworzyć swoją własną wersję pliku `Yii.php` i dołączyć ją w skrypcie wejściowym.

## Autoładowanie klas rozszerzeń ¶

Autoloader Yii potrafi również automatycznie ładować klasy rozszerzeń. Jedynym wymaganiem ze strony rozszerzenia jest prawidłowy zapis sekcji `autoload` w swoim pliku `composer.json`. Szczegóły na temat specyfikacji `autoload` znajdują się dokumentacji composera.

Jeśli nie korzystasz z autoloadera Yii, autoloader composera załaduje dla Ciebie automatycznie klasy rozszerzeń.