ホームページ >バックエンド開発 >PHPチュートリアル >PHPにおけるクラスの自動読み込みについて詳しく解説

PHPにおけるクラスの自動読み込みについて詳しく解説

藏色散人
藏色散人転載
2021-02-15 09:13:163462ブラウズ

PHP でのクラスの自動読み込み

以前は、 Composer の自動ロードの原理は、実際には PHP の自動クラス ロード機能を利用しています。

PHP でのクラスの自動ロードは、主に __autoload() と spl_autoload_register() という 2 つのメソッドに依存します。

今日は、これら 2 つの方法の使用法について簡単に説明します。

__autoload()

廃止されつつある魔法のメソッドなので、理解するだけで十分です。このメソッドを PHP7 で使用すると、古い警告が報告され、システムは spl_autoload_register() メソッドの使用を推奨します。

function __autoload($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
}

$autoA = new AutoA();
var_dump($autoA);

AutoA クラスをインスタンス化すると、現在のファイルにはこのクラスがなく、他のファイルをインクルードしたり、他のファイルから要求したりすることもありません。このとき、自動的にマジック メソッド __autoload() に入ります。 __autoload() メソッドには、このクラスが配置されているファイルを含めるだけで済みます。

spl_autoload_register()

このメソッドは現在、上記のマジック メソッドによるクラスの自動ロード機能を置き換えています。これは spl 拡張ライブラリのメソッドであり、spl 拡張ライブラリはデフォルトで PHP に統合されているため、安心して直接使用できます。

spl_autoload_register() の __autoload() に対する利点は、__autoload() を登録でき、__autoload() キューを実装および維持できることです。当初はファイル内に __autoload() メソッドは 1 つしか存在できませんでしたが、現在ではキューが存在します。

この方法では、すべての読み込みコードを 1 つの __autoload() メソッドで記述する必要はなく、複数の spl_autoload_register() を使用して各クラスを個別に読み込むことができます。

spl_autoload_register(function($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
});

$autoA = new AutoA();
var_dump($autoA);

参考: Composer 原則の詳細な検討 (2)

include または include_once を使用する

自動読み込みでは、使用する必要があるのはinclude を指定すると、クラスは繰り返しロードされません。

spl_autoload_register(function($name){
    include __DIR__ . '/autoload/' . $name . '.class.php';
    echo $name, PHP_EOL;
});

$autoA = new AutoA();
var_dump($autoA);

$autoA = new AutoA();
var_dump($autoA);

$autoA = new AutoA();
var_dump($autoA);

$autoB = new AutoB();
var_dump($autoB);

コードから、クラスが複数回インスタンス化される場合、$name は 1 回だけ出力されることがわかります。したがって、クラス ファイルの繰り返しロードの問題を心配する必要はありません。さらに、大規模なフレームワークで Composer を使用する場合、多くのクラスがロードされるため、_once メソッドによって効率の問題も発生します。

以上がPHPにおけるクラスの自動読み込みについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。