PHP のオートロードは通常、autoload メソッドと spl メソッドの 2 つのメソッドを使用できます。これら 2 つのメソッドは使用方法が異なります
autoload の使用方法 1:
最も一般的に使用される方法は、クラス名に基づいてクラス ファイルを検索し、require_one
コードは次のとおりです。以下:
function autoload($class_name) { $path = str_replace('_', '/', $class_name); require_once $path . '.php'; } // 这里会自动加载Http/File/Interface.php 文件 $a = new Http_File_Interface();
この方法の利点は、シンプルで使いやすいことです。もちろん、欠点もあります。欠点は、ファイル構造を変更するときにクラス名とファイル パスを強制的に変更する必要があることです。
オートロードの使用方法2(ダイレクトマッピング方法)
コードは以下の通りです:
$map = array( 'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' ); function autoload($class_name) { if (isset($map[$class_name])) { require_once $map[$class_name]; } } // 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 $a = new Http_File_Interface();
この方法の利点は、クラス名とファイルパスがマッピングでのみ維持されることです。構造の変更、いいえ クラス名を変更する必要がある場合は、マッピング内の対応する項目を変更するだけで済みます。
前の方法と比較したこの方法の欠点は、ファイルが多すぎる場合にこのマッピングを維持するのが非常に面倒なことです。おそらく、現時点では、メンテナンスのために json または別のファイルを使用することを検討するでしょう。おそらく、そのようなマッピングを維持または作成するためにフレームワークを使用することを考えるでしょう。
spl_autoload
autoload の最大の欠点は、複数の autoload メソッドを持てないことです
さて、次のシナリオを考えてください。あなたのプロジェクトには他の人のプロジェクトが存在します。プロジェクトには自動ロードもあるため、2 つの自動ロードが競合します。解決策は autoload を変更して 1 つにすることですが、これは間違いなく非常に面倒です。
そのため、spl の autoload シリーズ関数が表示されるように、autoload 呼び出しスタックを緊急に使用する必要があります。 spl_autoload_register を使用して複数のカスタム オートロード関数を登録できます
PHP バージョンが 5.1 以降の場合は、spl_autoload を使用できます
まず spl のいくつかの関数を理解します:
spl_autoload は _autoload() 実装のデフォルトです。自動ロードを実装するには、include_path
Spl_autoload で $class_name(.php/.inc) を探します:
コードは次のとおりです:
/*http.php*/ <?php class http { public function callname(){ echo "this is http"; } } /*test.php*/ <?php set_include_path("/home/yejianfeng/handcode/"); //这里需要将路径放入include spl_autoload("http"); //寻找/home/yejianfeng/handcode/http.php $a = new http(); $a->callname();
Spl_autoload_register
SPL 自動ロード関数スタックに関数を登録します。直接参照してください。例:
コードは次のとおりです:
/*http.php*/ <?php class http { public function callname(){ echo "this is http"; } } /*test.php*/ <?php spl_autoload_register(function($class){ if($class == 'http'){ require_once("/home/yejianfeng/handcode/http.php"); } }); $a = new http(); $a->callname();
spl_autoload_call
spl_autoload_registerに登録されている呼び出し関数を呼び出します。以下の例を参照してください
コードは次のとおりです:
/*http.php*/ <?php class http { public function callname(){ echo "this is http"; } } /*http2.php*/ <?php class http { public function callname(){ echo "this is http2"; } } /*test.php*/ <?php spl_autoload_register(function($class){ if($class == 'http'){ require_once("/home/yejianfeng/handcode/http.php"); } if($class == 'http2'){ require_once("/home/yejianfeng/handcode/http2.php"); } }); spl_auto_call('http2'); $a = new http(); $a->callname(); //这个时候会输出"this is http2"
spl_auto_register この関数により、 autoload ですが、カスタム関数を使用して自動読み込みを可能にします。この方法は現在では一般的に使用されています。
Zend の AutoLoader モジュールはこのメソッドを使用します。対応するコードを抜粋します
コードは次のとおりです:
spl_autoload_register(array(CLASS, 'autoload')); public static function autoload($class) { ….. }
以上がautoLoad自動読み込み機構の簡単な使い方チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。