20
class Manage
{

spl_autoload_register(function($class) {
    include $class . '.class.php';
});
}

上記のようなコードがあるとします。クラスをロードする匿名関数メソッドを使用することにしましたが、これはどのように使用されますか? どちらをロードするかをどのように正確に決定'$class'しますか?

4

2 に答える 2

26

そこにコードを配置することはできません。クラスの後に 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'. 次に、各関数が呼び出された後、クラスがまだ存在するかどうかを確認します。そうでない場合は、リストの最後に到達するまで続行します。クラスがロードされない場合、クラスが存在しないという致命的なエラーが発生します。

于 2012-06-21T03:51:37.417 に答える
15

ロードする「$class」をどのように正確に決定しますか?

$classphpによって自動的に渡されます。そして、それはまだ宣言されていないが、実行時にどこかで使用されるクラスの名前です

于 2012-06-21T03:51:33.910 に答える