class Manage
{
spl_autoload_register(function($class) {
include $class . '.class.php';
});
}
上記のようなコードがあるとします。クラスをロードする匿名関数メソッドを使用することにしましたが、これはどのように使用されますか? どちらをロードするかをどのように正確に決定'$class'
しますか?
class Manage
{
spl_autoload_register(function($class) {
include $class . '.class.php';
});
}
上記のようなコードがあるとします。クラスをロードする匿名関数メソッドを使用することにしましたが、これはどのように使用されますか? どちらをロードするかをどのように正確に決定'$class'
しますか?
そこにコードを配置することはできません。クラスの後に SPL レジスタを追加する必要があります。Manage
クラス内に関数を登録したい場合は、次のようにします。
class Manage {
public static function autoload($class) {
include $class . '.class.php';
}
}
spl_autoload_register(array('Manage', 'autoload'));
ただし、実証したように、無名関数を使用できます。クラスも必要ないので、次のようにするだけです。
spl_autoload_register(function($class) {
include $class . '.class.php';
});
どちらの方法でも、指定した関数は、オートロードを担当する関数のプールに追加されます。あなたの関数はこのリストに追加されます (リストにすでに関数があれば、あなたの関数が最後になります)。これで、次のようなことをすると:
UnloadedClass::someFunc('stuff');
PHP は UnloadedClass がまだ宣言されていないことを認識します。次に、SPL 自動ロード関数リストを反復処理します。各関数を 1 つの引数で呼び出します: 'UnloadedClass'
. 次に、各関数が呼び出された後、クラスがまだ存在するかどうかを確認します。そうでない場合は、リストの最後に到達するまで続行します。クラスがロードされない場合、クラスが存在しないという致命的なエラーが発生します。
ロードする「$class」をどのように正確に決定しますか?
は$class
phpによって自動的に渡されます。そして、それはまだ宣言されていないが、実行時にどこかで使用されるクラスの名前です