web-dev-qa-db-ja.com

__autoload()が廃止されたときにspl_autoload()を使用する方法

http://php.net/manual/en/language.oop5.autoload.php によると、魔法の関数__autoload()は非推奨となり、削除されます(!)PHPバージョン。公式の代替手段はspl_autoload()です。 http://www.php.net/manual/en/function.spl-autoload.php を参照してください。ただし、phpマニュアルではこの赤ちゃんの正しい使い方を説明してください。

私の質問:これを置き換える方法(私の自動クラスオートローダー)

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

spl_autoload()を使用するバージョンでは? 問題は、その関数にパスを与える方法を理解できないことです(名前空間のみを受け入れます)。

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

27
Sliq

_spl_autoload_register_ でオートロード関数を登録する必要があります。 "callable" を指定する必要があります。これを行う最も良い方法は、5.3以降、無名関数を使用することです。

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

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


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

35
lonesomeday