mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-09 09:36:56 +01:00
122 lines
5.7 KiB
Plaintext
122 lines
5.7 KiB
Plaintext
Aliasy i przestrzenie nazw
|
|
========================
|
|
|
|
Yii używa w dużym stopniu aliasów ścieżek. Alias ścieżki reprezentuje katalog
|
|
lub też ścieżkę pliku. Zapisany jest przy użyciu składni zawierającej kropki, podobnej
|
|
do powszechnie znanego formatu przestrzeni nazw:
|
|
|
|
~~~
|
|
AliasNadrzędny.ścieżka.do.celu
|
|
~~~
|
|
|
|
gdzie `AliasNadrzędny` jest aliasem do pewnego istniejącego folderu.
|
|
|
|
Używając [YiiBase::setPathOfAlias()], możemy przetłumaczyć alias na odpowiadającą mu ścieżkę.
|
|
Na przykład, `system.web.CController` zostanie przetłumaczony na ścieżkę `yii/framework/web/CController`.
|
|
|
|
Za pomocą [YiiBase::setPathOfAlias()] możemy również zdefiniować nowy alias do ścieżki katalogu głównego.
|
|
|
|
Aliasy nadrzędne
|
|
----------
|
|
|
|
Dla wygody, Yii predefiniuje następujące aliasy nadrzędne:
|
|
|
|
- `system`: wskazuje katalog framework Yii;
|
|
- `zii`: wskazuje na katalog z [biblioteką Zii](/doc/guide/extension.use#zii-extensions);
|
|
- `application`: wskazuje do [folderu głównego aplikacji](/doc/guide/basics.application#application-base-directory);
|
|
- `webroot`: wskazuje na katalog zawierający plik [skryptu wejściowego](/doc/guide/basics.entry). Alias ten został wprowadzony wraz z wersją 1.0.3.
|
|
- `ext`: wskazuje na katalog zawierający wszystkie [rozszerzenia](/doc/guide/extension.overview) stron trzecich. Alias ten został wprowadzony wraz z wersją 1.0.8.
|
|
|
|
Dodatkowo, jeśli aplikacja używa [modułów](/doc/guide/basics.module)
|
|
alias główny jest również predefiniowany dla każdego ID modułu i wskazuje na
|
|
katalog główny odpowiedniego modułu. Funkcjonalność ta jest dostępna od wersji 1.0.3.
|
|
|
|
Importowanie klas
|
|
-----------------
|
|
|
|
Używanie aliasów jest bardzo wygodne w celu dołączenia definicji klasy.
|
|
Na przykład, jeśli chcemy dołączyć definicję klasy [CController], możemy to zrobić następująco:
|
|
|
|
~~~
|
|
[php]
|
|
Yii::import('system.web.CController');
|
|
~~~
|
|
|
|
Metoda [import|YiiBase::import] różni się od `include` oraz `require` w tym, że jest
|
|
bardziej wydajna. Definicja klasy, która została importowana, nie jest ładowana
|
|
dopóki, nie zostanie użyta po raz pierwszy (zaimplementowano przy użyciu mechanizmu
|
|
autoładowania PHP). Importowanie wielokrotnie tej samej
|
|
przestrzeni nazw jest także dużo szybsze niż `include_once` czy też `require_once`.
|
|
|
|
> Tip|Wskazówka: Kiedy odnosimy się do klasy zdefiniowanej we frameworku Yii, nie musimy
|
|
> importować jej lub dołączać. Wszystkie klasy Yii są preimportowane.
|
|
|
|
###Używanie map klas
|
|
|
|
Poczynając od wersji 1.1.5, Yii umożliwia preimportowanie klas poprzez mechanizm
|
|
mapowania klas, które jest również używany przez klasy bazowe Yii. Preimportowane
|
|
klasy mogą być używane w dowolnym miejsu w aplikacji Yii bez potrzeby jawnego
|
|
importu czy też dołączania. funkcjonalnośc ta jest najczęściej używana przez frameworki
|
|
lub też biblioteki, które zostały zbudowane w oparciu o Yii.
|
|
|
|
Aby preimportować zestaw klasy, następujący kod musi zostać wykonany, zanim
|
|
metoda [CWebApplication::run()] zostanie wywołana:
|
|
|
|
~~~
|
|
[php]
|
|
Yii::$classMap=array(
|
|
'NazwaKlasy1' => 'ścieżka/do/Klasy1.php',
|
|
'NazwaKlasy2' => 'ścieżka/do/Klasy2.php',
|
|
......
|
|
);
|
|
~~~
|
|
|
|
|
|
Importowanie katalogów
|
|
---------------------
|
|
|
|
Możemy również użyć następującej składni do importowania całego katalogu, tak, że
|
|
wszystkie pliki klas w katalogu będą automatycznie dołączone gdy zajdzie taka potrzeba.
|
|
|
|
~~~
|
|
[php]
|
|
Yii::import('system.web.*');
|
|
~~~
|
|
|
|
Poza metodą [import|YiiBase::import] aliasy są używane w wielu innych miejscach odnoszących się do klasy.
|
|
Na przykład, alias może zostać przekazany do metody [Yii::createComponent()] w celu
|
|
utworzenia instancji klasy komponentu, nawet jeśli plik klasy nie był dołączony wcześniej.
|
|
|
|
Przestrzeń nazw (ang. namespace)
|
|
---------
|
|
|
|
Przestrzeń nazw wskazuje na logiczne grupowanie pewnych nazw klas, w celu
|
|
rozróżnienia ich od innych klas, nawet gdy te mają te same nazwy. Nie należy mylić
|
|
aliasów do ścieżek z przestrzeniami nazw. Alias jest jedynie wygodnym sposobem
|
|
nazwania pliku lub katalogu. Nie ma to nic wspólnego z przestrzenią nazw.
|
|
|
|
> Tip|Wskazówka: Ponieważ wcześniejsze wersje PHP niż 5.3.0 nie wspierały przestrzeni
|
|
nazw, nie możesz stworzyć instancji dwóch klasy, które posiadają tą samą nazwę
|
|
ale różnią się definicjami. Z tego powodu, Wszystkie klasy frameworku poprzedzone
|
|
są prefiksem zawierającym literę 'C' (od ang. 'class' - klasa), tak, by móc je rozróżnić
|
|
od klas zdefiniowanych przez użytkownika. Zaleca się, aby prefix 'C' był zarezerwowany
|
|
wyłącznie dla frameworku Yii a klasy użytkownika były poprzedzone prefiksem składającym
|
|
się z innej litery.
|
|
|
|
Klasy w przestrzeni nazw
|
|
------------------
|
|
|
|
Klasy w przestrzeni nazw są klasami zadeklarowanymi w nieglobalnej przestrzeni nazw.
|
|
Na przykład, klasa `application\components\GoogleMap` zadeklarowana jest w przestrzeni nazw
|
|
`application\components`. Używanie klas w przestrzeni nazw wymaga PHP w wersji 5.3.0 lub wyższej.
|
|
|
|
Poczynając od wersji 1.1.5, istnieje możliwość używanie klas w przestrzeni nazw bez konieczności
|
|
ich dołączania w sposób jawny. Na przykład, możemy utworzyć nową instancję
|
|
`application\components\GoogleMap` bez dołączania odpowiadającego jej pliku w sposób jawny.
|
|
Jest to możliwe, dzięki rozszerzeniu zaimplementowanego w Yii mechanizmu autoładowania klas.
|
|
|
|
W celu umożliwienia autoładowania klas w przestrzeni nazw, przestrzeń nazw musi być nazwana
|
|
w podobny sposób do nazw aliasów ścieżek. Na przykład, klasa `application\components\GoogleMap`
|
|
musi być zapisana w pliku, którego aliasem jest `application.components.GoogleMap`.
|
|
|
|
<div class="revision">$Id: basics.namespace.txt 2630 2010-11-08 21:13:33Z qiang.xue $</div> |