この記事では、PHP ファイルの自動読み込み (オートロード) に関する関連知識と詳細な使用方法を主に紹介します。必要な方は参考にしてください。
伝統的に、PHP ではクラス ファイルを使用する場合、クラス ファイルをドキュメントの先頭に含める必要があります:
<?php require_once('../includes/functions.php'); require_once('../includes/database.php'); require_once('../includes/user.php'); ...
しかし、呼び出すドキュメントが多すぎると、毎回 1 行記述する必要があり、見栄えがよくありません。PHP ドキュメントを自動的にロードする方法はありますか?
<?php function __autoload($class_name) { require "./{$class_name}.php"; }
はい、PHP のマジック関数 __autoload() を使用すると、現在のディレクトリに PHP ファイルを自動的にロードできます。もちろん、実際には、次のように使用する可能性が高くなります:
<?php function __autoload($class_name) { $name = strtolower($class_name); $path = "../includes/{$name}.php"; if(file_exists($path)){ require_once($path); }else{ die("the file {$class_name} could not be found"); } }
つまり、ファイル名の大文字と小文字を区別して処理します。ファイルが存在するかどうかを要求する前にチェックし、存在しない場合はカスタマイズされた情報を表示します。
同様の使用法は、プライベート プロジェクトや単一プロジェクトのフレームワークでよく見られます。なぜですか? __autoload 関数は 1 つしか定義できないため、複数人での開発では、全員が 1 つの __autoload を使用することに事前に同意しない限り、異なる開発者が異なるカスタマイズされたオートローダーを使用することは不可能であり、変更が発生するとバージョンの同期が発生します。
主な理由は、__autoload 関数が PHP バージョン 7.2 でまもなく非推奨になるということです。
警告 この機能は PHP 7.2.0 で廃止されました。この機能に依存することは強くお勧めできません。
その後、カスタマイズ可能な複数のオートローダーという利点がある spl_autoload_register() と呼ばれるものに置き換えられます。 .
//使用匿名函数来autoload spl_autoload_register(function($class_name){ require_once('...'); });
#
//使用一个全局函数 function Custom() { require_once('...'); } spl_autoload_register('Custom');
//使用一个class当中的static方法 class MyCustomAutoloader { static public function myLoader($class_name) { require_once('...'); } } //传array进来,第一个是class名,第二个是方法名 spl_autoload_register(['MyCustomAutoloader','myLoader']);
//甚至也可以用在实例化的object上 class MyCustomAutoloader { public function myLoader($class_name) { } } $object = new MyCustomAutoloader; spl_autoload_register([$object,'myLoader']);
自動ロードを使用する場合、__autoload() であろうと spl_autoload_register() であろうと、require や include と比較して、利点は自動ロード メカニズムが遅延読み込みであること、つまり遅延読み込みではないことです。これらのファイルは実行するとすぐに呼び出されますが、新しいファイルなど、使用するファイルのみが自動ロード メカニズムを通じてロードされます。
もちろん、spl_autoload_register は、次のようなさまざまなパッケージを含む laravel でよく使用されます:
/** * Prepend the load method to the auto-loader stack. * * @return void */ protected function prependToLoaderStack() { spl_autoload_register([$this, 'load'], true, true); }
関連する推奨事項:
PHP で mb_strpos を使用する php スキルの詳細な説明PHP で GZIP 圧縮出力を実現するために zlib 拡張機能を使用する方法の詳細な説明PHP は分散型 memcache を実装して Web クラスターのセッション同期方法の詳細な説明
以上がPHPファイルの自動読み込みphpサンプルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。