spl_autoload_register()
PHPがスタック/キューに入れ、「新しいクラス」が宣言されたときに順次呼び出す複数の関数(または独自のAutoloadクラスの静的メソッド)を登録できます。
だから例えば:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
上記の例では、「MyClass」はインスタンス化しようとしているクラスの名前です。PHPはこの名前を文字列としてに渡しspl_autoload_register()
ます。これにより、変数を取得して、適切なクラス/ファイルを「含める」ことができます。 。その結果、include / requireステートメントを介してそのクラスを具体的に含める必要はありません...
上記の例のように、インスタンス化するクラスを呼び出すだけspl_autoload_register()
で、すべてのクラスの場所を特定する独自の関数を(を介して)登録したので、PHPはその関数を使用します。
を使用する利点spl_autoload_register()
は、__autoload()
作成するすべてのファイルにオートロード機能を実装する必要がないことです。spl_autoload_register()
また、複数のオートロード関数を登録して、オートロードを高速化し、さらに簡単にすることもできます。
例:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
spl_autoloadに関して、マニュアルは次のように述べています:
この関数は、のデフォルト実装として使用することを目的としています__autoload()
。他に何も指定さspl_autoload_register()
れておらず、パラメータなしで呼び出された場合、この関数はその後のの呼び出しに使用されます__autoload()
。
より実用的には、すべてのファイルが単一のディレクトリにあり、アプリケーションが.phpファイルだけでなく、たとえば.inc拡張子を持つカスタム構成ファイルを使用する場合、使用できる1つの戦略は、すべてを含むディレクトリを追加することです。 PHPのインクルードパスへのファイル(経由set_include_path()
)。
また、構成ファイルも必要なため、spl_autoload_extensions()
PHPで検索する拡張機能をリストするために使用します。
例:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
spl_autoloadは__autoload()
magicメソッドのデフォルトの実装であるため、新しいクラスをインスタンス化しようとすると、PHPはspl_autoloadを呼び出します。
お役に立てれば...