40

http://php.net/manual/en/language.oop5.autoload.phpによると、マジック関数__autoload()は PHP 7.2.0 で廃止され、PHP 8.0.0 で削除されました。

公式の代替はspl_autoload(). http://www.php.net/manual/en/function.spl-autoload.phpを参照してください。しかし、PHP のマニュアルには、この赤ん坊の適切な使用方法が説明されていません。

私の質問:これ(私の自動クラスオートローダー)をバージョンに置き換える方法はspl_autoload()

function __autoload($class) {
    include 'classes/' . $class . '.class.php';
}

問題: その関数にパスを与える方法がわかりません (名前空間のみを受け入れます)。

ちなみに、SO にはこのトピックに関するスレッドがたくさんありますが、私のセクシーなワンライナーに代わるクリーンでシンプルなソリューションはありません。

4

1 に答える 1

69

オートロード関数をに登録する必要がありますspl_autoload_register「呼び出し可能」を提供する必要があります。5.3以降、これを行う最も良い方法は、無名関数を使用することです。

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

これに対するこれの主な利点は、もちろん、複数回__autoload呼び出すことができるのに対し、 (他の関数と同様に)1回しか定義できないことです。モジュラーコードを使用している場合、これは重大な欠点になります。spl_autoload_register__autoload


これに対する2018年の更新:独自のオートローダーをロールする必要がある場合はそれほど多くないはずです。広く受け入れられている標準(PSR-4と呼ばれる)といくつかの準拠する実装があります。これを行うための明白な方法は、Composerを使用することです。

于 2012-05-21T15:11:19.207 に答える