0 フォロワー

クラスのオートロード

Yiiは、必要なすべてのクラスファイルを見つけてインクルードするために、クラスオートロードメカニズムに依存しています。PSR-4標準に準拠した高性能のクラスオートローダーを提供します。オートローダーは、Yii.phpファイルを含めるとインストールされます。

注: 説明を簡単にするために、このセクションではクラスのオートロードについてのみ説明します。ただし、ここで説明する内容は、インターフェースやトレイトのオートロードにも適用されることに注意してください。

Yii オートローダーの使用

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で編集する !