PHP オートローダは、クラスの構築時にファイルをインクルードするメカニズムにすぎません。
すべてのクラスを 1 つのファイルに入れる場合、オートローダーは必要ありません。もちろん、オブジェクト指向をプログラミングするときは、すべてのクラスに独自のファイルを与えます。そこでオートローダーの出番です。
いくつかの例:
class AutoLoader
{
public function __construct()
{
spl_autoload_register( array( $this, 'ClassLoader' ));
}
public function ClassLoader( $class )
{
if( class_exists( $class, false ))
return true;
if( is_readable( 'path_to_my_classes/' . $class . '.php' ))
include_once 'path_to_my_classes/' . $class . '.php'
}
}
$autoloader = new AutoLoader();
ここで何が起こるかというと、オートローダー クラスが作成されると、クラス メソッド Classloader がオートローダーとして登録されます。
新しいクラスが作成されると、Classloader メソッドはまず、クラスのファイルが既にロードされているかどうかを確認します。そうでない場合、クラスの先頭にパスが追加され、拡張子が追加されます。ファイルが読み取り可能な場合は、含まれます。
もちろん、これを非常に洗練されたものにすることもできます。名前空間とマッパーの例を見てみましょう。オートローダー クラスにいるとします。
private $mapper array( 'Foo' => 'path_to_foo_files/', 'Bar' => 'path_to_bar_files/');
public function ClassLoader( $class )
{
if( class_exists( $class, false ))
return true;
// break into single namespace and class name
$classparts = explode( '\\', $class );
$path = $this->mapper[$classparts[0]];
if( is_readable( $path . $classparts[1] . '.php' ))
include_once $path . $classparts[1] . '.php'
}
ここで、クラス名は名前空間部分とクラス名部分に分割されます。名前空間部分はマッパー配列で検索され、そのパスが php ファイルのインクルード パスとして使用されます。
これらは、オートローダーで何ができるかを示すための単なる例です。本番環境では、エラー チェックなど、さらにいくつかの作業を行う必要があります。