Sökvägsalias och namnområde

Yii använder sökvägsalias extensivt. Ett sökvägsalias är associerat till en katalog eller filsökväg. Det specificeras med punktnotation, snarlikt detta vanligt förekommande namnområdesformat (namespace format):

RootAlias.path.to.target

där RootAlias är alias för någon befintlig katalog.

Med hjälp av YiiBase::getPathOfAlias() kan ett alias översättas till motsvarande sökväg. Till exempel, system.web.CController skulle översättas till yii/framework/web/CController.

Nya rotsökvägsalias kan definieras genom anrop av YiiBase::setPathOfAlias().

1. Rotalias

För att underlätta fördefinierar Yii följande rot-alias:

Om applikationen dessutom använder sig av moduler, fördefinieras, för varje modul, ett rotalias med samma namn som modul-ID, refererande till modulens rotsökväg. Till exempel, om en applikation använder en modul vars ID är users, kommer ett rotalias med namnet users att fördefinieras.

2. Importera klasser

Med hjälp av alias är det mycket bekvämt att importera definitionen för en klass. Till exempel, för att inkludera klassen CController, kan vi göra följande anrop:

Yii::import('system.web.CController');

Metoden import skiljer sig från include och require genom att den är effektivare. Klassdefinitionen som skall importeras inkluderas inte förrän den refereras till första gången (implementeras via PHP:s mekanism för automatisk laddning). Att importera samma namnområde flera gånger är även det mycket snabbare än include_once och require_once.

Tips: När en klass som definieras av Yii-ramverket refereras, behöver denna inte importeras eller inkluderas. Alla kärnklasser i Yii importeras i förväg.

Använda klassmappning

Med start från version 1.1.5, tillåter Yii användardefinierade klasser att importeras i förväg via en klassmappningsmekanism som även används för Yii:s kärnklasser. I förväg importerade klasser kan användas överallt i en Yii-applikation utan att de explicit importeras eller inkluderas. Denna finess kommer mest till sin fördel för ramverk eller bibliotek som baseras på (är påbyggnader till) Yii.

För att förvägsimportera en uppsättning klasser behöver följande kod köras innan CWebApplication::run() anropas:

Yii::$classMap=array(
    'ClassName1' => 'path/to/ClassName1.php',
    'ClassName2' => 'path/to/ClassName2.php',
    ......
);

3. Importera kataloger

Följande syntax kan användas för att importera en hel katalog, så att klassfilerna i katalogen automatiskt inkluderas när så erfordras.

Yii::import('system.web.*');

Förutom import, används alias även på många andra ställen för att referera till klasser. Till exempel kan ett alias lämnas med till Yii::createComponent() för att skapa en instans av motsvarande klass, även om klassfilen inte tidigare inkluderats.

4. Namnområde

Ett namnområde (namespace) refererar till logisk gruppering av ett antal klassnamn så att de kan särskiljas från andra klasser med samma namn. Förväxla inte sökvägsalias med namnområde. Ett sökvägsalias är enbart ett bekvämt sätt att referera till en fil eller en katalog. Det har inget samband med namnområden.

Tips: Då PHP före version 5.3.0 inte har inbyggt stöd för namnområden, går det inte att ha instanser av två klasser med samma namn men olika definitioner. Av denna anledning har alla Yii-klasser namn med prefixet 'C' (som i 'class'), så att de kan skiljas från användardefinierade klasser. Det rekommenderas att C- prefixet reserveras för användning endast av Yii-ramverket, och att användardefinierade klasser förses med någon annan prefixbokstav.

5. Klasser med namnområde

En klass med namnområde refererar till en klass deklarerad inom ett icke-globalt namnområde. Till exempel är klassen application\components\GoogleMap deklarerad inom namnområdet application\components. Användning av klasser med namnområde kräver PHP 5.3.0 eller senare.

Med start från version 1.1.5, är det möjligt att använda en klass med namnområde utan att först explicit inkludera den. Till exempel kan vi skapa en ny instans av application\components\GoogleMap utan att explicit inkludera motsvarande klassfil. Detta möjliggörs genom Yii:s utökade mekanismen för automatisk laddning av klasser.

För att det skall gå att automatiskt ladda en klass med namnområde, måste namnområdet namnges på ett sätt som liknar namngivning av ett sökvägsalias. Till exempel klassen application\components\GoogleMap måste lagras i en fil som kan ges alias application.components.GoogleMap.

$Id: basics.namespace.txt 3086 2011-03-15 00:04:53Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.