Yaf_Loader クラス

(Yaf >=1.0.0)

はじめに

Yaf_Loader は、 Yaf 用に包括的なオートローディング機能を導入します。

最初に Yaf_Application のインスタンスを取得するときに、 Yaf_Loader はシングルトンのインスタンスを作って それを spl_autoload に登録します。このインスタンスを取得するには Yaf_Loader::getInstance() を使います。

Yaf_Loader は、クラスのロードを一度だけ試みます。 失敗した場合の挙動は yaf.use_spl_auload によって変わります。もしこの設定が On なら Yaf_Loader::autoload()false を返し、 他のオートロード関数でやり直せるようになります。この設定が Off (デフォルト) の場合は Yaf_Loader::autoload()true を返します。 そして、より重要なのは、このときに警告メッセージが出ることです (このメッセージを見れば、なぜロードできなかったのかがわかります)。

注意:

yaf.use_spl_autoload はできるだけ Off のままにしておきましょう。 ただし、何かのライブラリが自前のオートロード機構を持っていて、 それを置き換えるのが不可能だという場合は別です。

デフォルトでは、Yaf_Loader はすべてのライブラリ (クラスを定義したスクリプト) が グローバル ライブラリディレクトリ に格納されているものとみなします。このディレクトリは、 php.ini (yaf.library) で指定します。

Yaf_Loader がクラス (ライブラリ) を探すときに ローカルクラスディレクトリ (application.ini で定義するもので、デフォルトは application.directory . "/library") も検索対象とさせたい場合は、クラスのプレフィックスを Yaf_Loader::registerLocalNameSpace() で登録する必要があります。

いくつか例を示します (APPLICATION_PATH は application.directory であるものとします)。

例1 設定の例

// php.ini で、これを設定しているものとします yaf.library = "/global_dir"application.library = APPLICATION_PATH "/library"
また、次のローカル名前空間を登録しているものとします。

例2 localnamespace の登録

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function
_initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
オートロードの例です。

例3 クラスのロード

class Foo_Bar_Test => class GLO_Name => class BarNon_Test

例4 名前空間つきのクラスのロード

class \Foo\Bar\Dummy => class \FooBar\Bar\Dummy =>

すべてのフォルダの先頭が大文字になっているのが気になる場合は、php.ini で yaf.lowcase_path = On とすれば小文字にすることもできます。

Yaf_Loader は MVC クラスを読み込むようにも作られています。 次のような規約に従います。

例5 MVC クラスのロード

Controller Classes => Model Classes => Plugin Classes =>
クラスのサフィックス (デフォルト設定の場合。プレフィックスを使うには yaf.name_suffix の値を変更します) で、MVC クラスであるかそうでないかを判断します。

例6 MVC クラスかどうかの区別

Controller Classes => Model Classes => Plugin Classes =>
例を示します。

例7 MVC のロード

class IndexController class DataModel => class DummyPlugin => class A_B_TestModel =>

注意:

2.1.18 からは、Yaf はユーザースクリプト側からのコントローラのオートロードに対応しました (つまり、ユーザーが書いた PHP スクリプトからオートロードを実行できるということです。 ブートストラップやプラグインから、コントローラのstaticプロパティにアクセスできます)。 しかし、オートローダーがコントローラクラスを探す場所は、デフォルトのモジュールフォルダつまり "APPLICATION_PATH/controllers/" だけになります。

また、ディレクトリは yaf.lowcase_path の影響を受けます。

クラス概要

classYaf_Loader {
protected$_local_ns;
protected$_library;
static$_instance;
private__construct()
publicautoload(): void
publicstaticgetInstance(): void
publicgetLibraryPath(bool$is_global = false): Yaf_Loader
publicgetNamespacePath(string$namespaces): string
publicgetNamespaces(): array
publicstaticimport(): void
publicisLocalName(): void
publicregisterNamespace(string|array$namespaces, string$path = ?): bool
publicsetLibraryPath(string$directory, bool$is_global = false): Yaf_Loader
}

プロパティ

_local_ns

_library

デフォルトでは、この値は application.directory . "/library" となります。この値を変更するには、application.ini (application.library) で設定するか、あるいは Yaf_Loader::setLibraryPath() をコールします。

_global_library

_instance

目次

To Top