web-dev-qa-db-ja.com

php spl_autoload_register vs __autoload?

こんにちは、私たち自身の名前の自動ロードを使用できることを除いて、これを使用する違いはありますか?パフォーマンスに違いはありますか?それらは内部でどのように機能しますか?

の間に

function __autoload_libraries($class){
    include_once 'lib.'.$class.'.php';
}

spl_autoload_register('__autoload_libraries');

vs

function __autoload($class){
    include_once 'lib.'.$class.'.php';
}
29
Adam Ramadhan

__autoloadは一般的に廃止されたと見なされます。オートローダーは1つしか使用できません。通常、__autoloadをサポートせずにPHPのバージョンを使用している場合は、spl_autload_registerのみを使用する必要があります。

spl_autoload_registerを使用すると、複数のオートローダーを登録できます。これらのオートローダーは、一致するクラス/インターフェース/トレイトが見つかってロードされるまで、またはすべてのオートロードオプションが使い果たされるまで順番に実行されます。つまり、独自のオートローダーを実装するフレームワークコードやその他のサードパーティライブラリを使用している場合は、競合が発生することを心配する必要はありません。

更新:

__autoloadはPHP 7.2.0で正式に非推奨になりました。これは、現在、チョッピングブロックにあることを意味します。コードをPHPの将来のバージョンと互換性を持たせたい場合は、__autoloadを使用しないでください。

49
GordonM

「クラスの自動読み込み」のドキュメント 読み取り:

spl_autoload_register()は、クラスを自動ロードするためのより柔軟な代替手段を提供します。このため、__ autoload()の使用は推奨されておらず、将来的に非推奨または削除される可能性があります。

spl_autoload_register()のドキュメント 読み取り:

複数の自動ロード関数が必要な場合、spl_autoload_register()はこれを可能にします。自動ロード関数のキューを効果的に作成し、定義された順序で各関数を実行します。対照的に、__ autoload()は一度だけ定義できます。

2
Vladimir Kornea