Yiiは、必要なすべてのクラスファイルを見つけてインクルードするために、クラスオートロードメカニズムに依存しています。PSR-4標準に準拠した高性能のクラスオートローダーを提供します。オートローダーは、Yii.php
ファイルを含めるとインストールされます。
注: 説明を簡単にするために、このセクションではクラスのオートロードについてのみ説明します。ただし、ここで説明する内容は、インターフェースやトレイトのオートロードにも適用されることに注意してください。
Yiiクラスオートローダーを利用するには、クラスを作成および命名するときに、次の2つの簡単なルールに従う必要があります。
foo\bar\MyClass
)// $className is a fully qualified class name without the leading backslash
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
たとえば、クラス名と名前空間がfoo\bar\MyClass
の場合、対応するクラスファイルのパスのエイリアスは@foo/bar/MyClass.php
になります。このエイリアスをファイルパスに解決できるようにするには、@foo
または@foo/bar
がルートエイリアスである必要があります。
ベーシックプロジェクトテンプレートを使用する場合、クラスをトップレベルの名前空間app
の下に配置すると、新しいエイリアスを定義する必要なく、Yiiでオートロードできます。これは、@app
が定義済みのエイリアスであり、app\components\MyClass
のようなクラス名は、上記したアルゴリズムに従ってクラスファイルAppBasePath/components/MyClass.php
に解決できるためです。
Advanced Project Templateでは、各層が独自のルートエイリアスを持っています。例えば、フロントエンド層は@frontend
というルートエイリアスを持ち、バックエンド層のルートエイリアスは@backend
です。結果として、フロントエンドのクラスはfrontend
名前空間に、バックエンドのクラスはbackend
名前空間に配置できます。これにより、これらのクラスはYiiオートローダーによって自動的にロードされるようになります。
オートローダーにカスタム名前空間を追加するには、Yii::setAlias()を使用して、名前空間のベースディレクトリのエイリアスを定義する必要があります。例えば、path/to/foo
ディレクトリにあるfoo
名前空間のクラスをロードするには、Yii::setAlias('@foo', 'path/to/foo')
を呼び出します。
Yiiクラスオートローダーは、クラスマップ機能をサポートしており、クラス名を対応するクラスファイルパスにマッピングします。オートローダーがクラスをロードする際、最初にクラスがマップに見つかるかどうかを確認します。見つかった場合は、それ以上チェックを行わずに、対応するファイルパスが直接インクルードされます。これにより、クラスのオートロードが非常に高速になります。実際、すべてのコアYiiクラスはこの方法でオートロードされます。
Yii::$classMap
に格納されているクラスマップにクラスを追加するには、次の手順を使用します。
Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
エイリアスを使用して、クラスファイルパスを指定できます。クラスマップは、ブートストラッププロセスで設定する必要があります。これにより、クラスが使用される前にマップが準備されます。
Yiiはパッケージ依存関係マネージャーとしてComposerを採用しているため、Composerオートローダーもインストールすることをお勧めします。独自のオートローダーを持つサードパーティライブラリを使用している場合は、それらもインストールする必要があります。
Yiiオートローダーを他のオートローダーと一緒に使用する場合は、他のすべてのオートローダーがインストールされた後にYii.php
ファイルをインクルードする必要があります。これにより、Yiiオートローダーがクラスのオートロード要求に最初に応答するようになります。たとえば、次のコードはBasic Project Templateのエントリスクリプトから抽出されたものです。最初の行はComposerオートローダーをインストールし、2行目はYiiオートローダーをインストールします。
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
Yiiオートローダーなしで、Composerオートローダー単独で使用することもできます。ただし、そうすることで、クラスのオートロードのパフォーマンスが低下する可能性があり、クラスをオートロード可能にするためにComposerが設定したルールに従う必要があります。
情報: Yiiオートローダーを使用しない場合は、独自のバージョンの
Yii.php
ファイルを作成し、それをエントリスクリプトに含める必要があります。
Yiiオートローダーは、拡張機能クラスをオートロードできます。唯一の要件は、拡張機能がcomposer.json
ファイルでautoload
セクションを正しく指定することです。autoload
の指定に関する詳細については、Composerドキュメントを参照してください。
Yiiオートローダーを使用しない場合でも、Composerオートローダーは拡張機能クラスをオートロードできます。
タイプミスを見つけましたか?または、このページを改善する必要があると思いますか?
githubで編集する !
コメントするには、サインアップまたはログインしてください。