ホームページ  >  記事  >  バックエンド開発  >  PHPファイルの自動読み込みphpサンプルの詳細説明

PHPファイルの自動読み込みphpサンプルの詳細説明

jacklove
jackloveオリジナル
2018-06-28 17:28:081534ブラウズ

この記事では、PHP ファイルの自動読み込み (オートロード) に関する関連知識と詳細な使用方法を主に紹介します。必要な方は参考にしてください。

伝統的に、PHP ではクラス ファイルを使用する場合、クラス ファイルをドキュメントの先頭に含める必要があります:

<?php
require_once(&#39;../includes/functions.php&#39;);
require_once(&#39;../includes/database.php&#39;);
require_once(&#39;../includes/user.php&#39;);
...

しかし、呼び出すドキュメントが多すぎると、毎回 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(&#39;...&#39;);
});

#

//使用一个全局函数
function Custom()
{
  require_once(&#39;...&#39;);
}

spl_autoload_register(&#39;Custom&#39;);

#
//使用一个class当中的static方法
class MyCustomAutoloader
{
  static public function myLoader($class_name)
  {
    require_once(&#39;...&#39;);    
  }
}

//传array进来,第一个是class名,第二个是方法名
spl_autoload_register([&#39;MyCustomAutoloader&#39;,&#39;myLoader&#39;]);

//甚至也可以用在实例化的object上
class MyCustomAutoloader
{
  public function myLoader($class_name)
  {
  }
}

$object = new MyCustomAutoloader;
spl_autoload_register([$object,&#39;myLoader&#39;]);

自動ロードを使用する場合、__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, &#39;load&#39;], true, true);
}

関連する推奨事項:

PHP で mb_strpos を使用する php スキルの詳細な説明


PHP で GZIP 圧縮出力を実現するために zlib 拡張機能を使用する方法の詳細な説明


PHP は分散型 memcache を実装して Web クラスターのセッション同期方法の詳細な説明


以上がPHPファイルの自動読み込みphpサンプルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。