0 follower

パスエイリアスと名前空間

Yiiは広範囲に渡るパスエイリアスを使用します。パスエイリアスは、特定の ディレクトリ、またはファイルパスと結びつけられます。これは、広範囲に 採用されている名前空間のフォーマットに似たドットシンタックスによって 表されます:

RootAlias.path.to.target

RootAliasの部分は現存するディレクトリへのエイリアスです。 YiiBase::setPathOfAlias()を呼出すことにより、新たにパスエイリアスを定義することができます。 便宜上、Yiiは以下のルートエイリアスをあらかじめ定義しています。

  • system: Yiiフレームワークのディレクトリを参照します。
  • application: アプリケーションのbase directoryを参照します。
  • webroot: entry scriptファイルを含むディレクトリを参照します。 このエイリアスは1.0.3版から使用可能です。

さらに、もしアプリケーションがmodulesを使用している場合は、 ルートエイリアスはあらかじめそれぞれのモジュールIDを定義し、対応するモジュールのベースパスを参照します。 この機能は1.0.3版から使用可能です。

YiiBase::getPathOfAlias()を使用する事によって、エイリアスを対応するパスへ 変換することができます。例えば、system.web.CControlleryii/framework/web/CController の様に変換されます。

エイリアスを使用する事によって、クラスの定義をインポートする事が 大変便利になります。例えば、CControllerの定義をインクルードしたい時、 下記の様にコールする事が出来ます:

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

import メソッドはより効率的という点で includerequire とは違います。インポートされるクラスの定義は、厳密には、 それが始めて参照されるときまでインクルードされません。同じ名前空間が 何度もインポートされる場合においても、include_onderequire_once よりも断然早いのです。

ヒント: Yiiフレームワークで定義されたクラスを参照する場合、 インポートやインクルードを行う必要はありません。Yiiの全てのコアクラスは、 あらかじめインポートされています。

下記のシンタックスによって、ディレクトリ配下のクラスファイルが、必要な時に 自動的にインクルードされるように、ディレクトリ全体をインポート する事が出来ます。

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

importの他にも、エイリアスはクラスを参照する為に、 様々な箇所で使用されます。例えば、もしクラスファイルが予めインクルード されていない場合でも、クラスに結びついたインスタンスを作成する為に、 エイリアスをYii::createComponent() に渡すことが出来ます。

名前空間とパスエイリアスで混乱しないで下さい。パスエイリアスは クラスファイルかディレクトリの参照に使用され、名前空間は、 クラス名の論理的なグループを参照する事によって、たとえクラス名が同じでも、 他の名前空間のものとは別に識別する為のものです。

ヒント: PHP 5.3.0よりも以前のバージョンでは名前空間のサポートが 本質的に無いので、同じ名前のクラスのインスタンスを作成することが 出来ない為、異なる定義を行う必要があります。この理由によって、 全てのYiiフレームワークのクラスは、前置詞として'C'('class'を意味します) を付随させていて、この事によって、ユーザーが定義したクラスと識別が 出来るようになっています。前置詞'C'はYiiフレームワークの使用の為に リザーブしておき、ユーザー定義によるクラスの前置詞には別の文字列を 使用して下さい。