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

藏色散人
リリース: 2023-04-09 18:16:02
転載
3394 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!