ホームページ  >  記事  >  バックエンド開発  >  PHPファイルのオートロードについて詳しく解説

PHPファイルのオートロードについて詳しく解説

小云云
小云云オリジナル
2018-02-05 09:09:391708ブラウズ

従来、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");
    }
}

つまり、ファイル名の大文字と小文字を区別して処理し、ファイルが存在するかどうかを require する前にチェックします。存在しない場合は、カスタマイズされた情報を表示します。

同様の使用法はプライベート プロジェクトや単一プロジェクトのフレームワークでよく見られますが、なぜですか? __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);
}

関連する推奨事項:

Zend Framework チュートリアルでのオートロードの使用法の詳細な説明

PHP の PSR-0 標準の使用法namespace オートロードの実行

Zend Framework チュートリアルでのオートロードの使用方法の詳細な説明

以上がPHPファイルのオートロードについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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