Files
yii/docs/guide/pl/basics.namespace.txt
2011-01-16 14:55:27 +00:00

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>