Yiiは広範囲に渡るパスエイリアスを使用します。パスエイリアスは、特定の ディレクトリ、またはファイルパスと結びつけられます。これは、広範囲に 採用されている名前空間のフォーマットに似たドットシンタックスによって 表されます:
RootAlias.path.to.target
RootAliasの部分は現存するディレクトリへのエイリアスです。
YiiBase::getPathOfAlias()を使うことより、エイリアスは対応するパスへ変換されます。
例えば、system.web.CControllerはyii/framework/web/CControllerのように変換されます。
また、YiiBase::setPathOfAlias()を用いて、新しいルートパスエイリアスを定義することができます。
便宜上、Yiiは以下のルートエイリアスをあらかじめ定義しています。
system: Yiiフレームワークのディレクトリを参照します。zii: Zii libraryディレクトリを参照します。application: アプリケーションのbase directoryを参照します。webroot: entry scriptファイルを含むディレクトリを参照します。ext: すべてのサードパーティextensionsを含むディレクトリを参照します。さらに、もしアプリケーションがmodulesを使用している場合は、
それぞれのモジュールは、モジュールIDと同じ名前を持ち、モジュールのベースパスを参照するあらかじめ定義されたロートエイリアスを持ちます。
例えばもしアプリケーションがモジュールIDがusersであるようなモジュールを使用する場合、usersという名前のルートエイリアスはあらかじめ定義されます。
エイリアスを使用するにあたり、クラスの定義を含めることは非常に便利です。 例えば、CControllerクラスを含める場合、以下のように呼び出します。
Yii::import('system.web.CController');
import メソッドはより効率的という点で include や
require とは違います。インポートされるクラスの定義は、厳密には、
それが始めて参照されるときまでインクルードされません。同じ名前空間が
何度もインポートされる場合においても、include_onde や require_once
よりも断然早いのです。
ヒント: Yiiフレームワークで定義されたクラスを参照する場合、 インポートやインクルードを行う必要はありません。Yiiの全てのコアクラスは、 あらかじめインポートされています。
1.1.5版からはYiiコアクラスにも使用されているクラスマッピング機構を、あらかじめユーザクラスをインポート するために使用可能になりました。 あらかじめインポートされたクラスはYiiアプリケーションのどこでも明にインポート/インクルードせずに使用可能です。 この特徴はYiiの上に構築するフレームワークやライブラリとって最も有用です。
クラスをあらかじめインポートするには、CWebApplication::run()が起動されるまえに以下のコードを実行する必要があります。
Yii::$classMap=array( 'ClassName1' => 'path/to/ClassName1.php', 'ClassName2' => 'path/to/ClassName2.php', ...... );
下記のシンタックスによって、ディレクトリ配下のクラスファイルが、必要な時に 自動的にインクルードされるように、ディレクトリ全体をインポート する事が出来ます。
Yii::import('system.web.*');
importの他にも、エイリアスはクラスを参照する為に、 様々な箇所で使用されます。例えば、もしクラスファイルが予めインクルード されていない場合でも、クラスに結びついたインスタンスを作成する為に、 エイリアスをYii::createComponent() に渡すことが出来ます。
名前空間は、クラス名の論理的なグループを参照する事によって、たとえクラス名が同じでも、 他の名前空間のものとは別に識別する為のものです。 名前空間とパスエイリアスで混乱しないで下さい。 パスエイリアスはファイルやディレクトリの名前をつける便利な手法ではありません。それは 名前空間とは無関係です。
ヒント: PHP 5.3.0よりも以前のバージョンでは名前空間のサポートが 本質的に無いので、同じ名前のクラスのインスタンスを作成することが 出来ない為、異なる定義を行う必要があります。この理由によって、 全てのYiiフレームワークのクラスは、前置詞として'C'('class'を意味します) を付随させていて、この事によって、ユーザーが定義したクラスと識別が 出来るようになっています。前置詞'C'はYiiフレームワークの使用の為に リザーブしておき、ユーザー定義によるクラスの前置詞には別の文字列を 使用して下さい。
名前空間化クラスはグローバルでない名前空間において宣言されるクラスを意味します。
例えば、application\components\GoogleMapクラスはapplication\components名前空間で宣言されます。
名前空間化クラスはPHP5.3.0かそれ以上が必要です。
1.1.5版からは名前空間化クラスを明に宣言することなしに使用可能になりました。
例えば、application\components\GoogleMapの新しいインスタンスを作成する場合に対応するクラスファイルを
明にインクルードしなくても良くなりました。これはYiiの自動クラスロード機構を拡張するものです。
名前空間化クラスを自動ロードするためには、名前空間はパスエイリアスと似たような名前付けをされている必要があります。
例えばapplication\components\GoogleMapはapplication.components.GoogleMapとしてエイリアスされるファイルに格納される必要があります。
Be the first person to leave a comment
Please login to leave your comment.