Path Alias e Namespace

Yii utilizza ampiamente i path alias. Un path alias è associato ad una cartella od al percorso per un file. Utilizza la sintassi del punto, similmente a quanto diffusamente adottato per il formato dei namespace:

RootAlias.percorso.per.obiettivo

dove RootAlias è l'alias di una qualche cartella esistente.

Utilizzando YiiBase::getPathOfAlias(), un alias può essere tradotto nel suo path corrispondente. Per esempio, system.web.CController verrebbe tradotto come yii/framework/web/CController.

Si può anche utilizzare YiiBase::setPathOfAlias() per definire un nuovo path alias principale.

1. Alias principale

Per comodità, Yii predefinisce i seguenti alias principali:

  • system: si riferisce alla cartella del framework Yii;
  • zii: si riferisce alla cartella della libreria Zii;
  • application: si riferisce alla cartella principale dell'applicazione;
  • webroot: si riferisce alla cartella che contiene il file dell'entry script.
  • ext: si riferisce alla cartella che contiene tutte le estensioni sviluppate da terze parti.

Inoltre, se un'applicazione utilizza i moduli, ogni modulo avrà un alias principale predefinito che ha lo stesso nome dell'ID del modulo e si riferisce al path di base del modulo. Per esempio, se una applicazione utilizza un modulo il cui ID è users, verrà predefinito un alias principale che si chiamerà users.

2. Importazione di classi

L'uso di alias, è molto utile per includere la definizione di una classe. Per esempio, se si vuole includere la classe CController, si può fare come segue:

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

Il metodo import si differenza da include e require nel senso che è molto efficiente. La definizione della classe che si deve importare in realtà non viene inclusa fin quando non vi si fa riferimento per la prima volta (implementato attraverso il meccanismo di autoload di PHP). L'importazione dello stesso namespace più volte è molto più veloce di include_once e require_once.

Suggerimento: Quando si fa riferimento ad una classe definita dal framework Yii, non è necessario importarla od includerla. Tutto il core delle classi di Yii sono preimportate.

Usare la mappa delle classi

A partire dalla versione 1.1.5, Yii permette alle classi utente di essere preimportate attraverso un meccanismo di mappatura delle classi che è usato anche dalle classi del core di Yii. Le classi preimportate possono essere utilizzate ovunque in una applicazione Yii senza che vengano importate od incluse esplicitamente. Questa funzionalità è molto utile per un framework o per una libreria che è costruita su a Yii.

Per preimportare una serie di classi, deve essere eseguito il seguente codice prima che venga invocato CWebApplication::run():

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

3. Importazione delle cartelle

Si può utilizzare anche la seguente sintassi per importare un'intera cartella cosicché i file delle classi all'interno della cartella possono essere automaticamente incluse quando necessario.

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

Oltre che per l'importazione, gli alias sono anche utilizzati in molti altri posti per riferirsi alle classi. Per esempio, un alias può essere passato a Yii::createComponent() per creare una istanza della corrispondente classe, anche se il file della classe non è stato incluso in precedenza.

4. Namespace

Un namespace si riferisce ad un raggruppamento logico di alcuni nomi di classe cosicché esse possano essere differenziate dagli altri nomi di classi anche se i loro nomi sono gli stessi. Non si confondano i path alias con i namespace. Un path alias è semplicemente un modo conveniente di nominare un file od una cartella. Non ha niente a che vedere con i namespace.

Suggerimento: Dato che PHP prima della versione 5.3.0 non supporta intrinsecamente i namespace, non si possono creare istanze di due classi che hanno lo stesso nome ma con definizioni differenti. Per questa ragione, tutte le classi del framework Yii hanno il prefisso 'C' (che significa 'classe') cosicché possano essere differenziate dalle classi definite dagli utenti. Si raccomanda che il prefisso 'C' sia riservato solo ad uso del framework Yii e che le classi definite dagli utenti abbiano come prefisso una qualunque altra lettera.

5. Classi nel namespace

Una classe nel namespace si riferisce ad una classe dichiarata all'interno di un namespace non globale. Per esempio, la classe application\components\GoogleMap è dichiarata all'interno del namespace application\components. L'uso di classi nel namespace richiede PHP 5.3.0 o superiore.

A partire dalla versione 1.1.5 di Yii, è possibile usare le classi nel namespace senza includerle esplicitamente. Per esempio, si può creare una nuova istanza di application\components\GoogleMap senza includere esplicitamente il corrispondente file della classe. Ciò è reso possibile dal miglioramento del meccanismo di autoload delle classi di Yii.

Per poter eseguire l'autoload di una classe nel namespace, il namespace deve essere chiamato in modo simile al nome di un path alias. Per esempio la classe application\components\GoogleMap deve essere memorizzata in un file che può avere come 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.