この記事では主に PHP の autoLoad の自動読み込み機構の解析を紹介します。必要な方は参考にしてください。 PHP の autoload メソッドを使用します: __autoload メソッドと spl メソッド。これら 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();
$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();
__自動ロードの最大の欠点は、複数の自動ロード メソッドを使用できないことです。
次のシナリオを考えてください。あなたのプロジェクトは他の人のプロジェクトを参照しています。プロジェクトに __autoload があり、他の人のプロジェクトにも __autoload があるため、2 つの __autoload が競合します。解決策は __autoload を変更して 1 になるようにすることですが、これは間違いなく非常に面倒です。 したがって、spl の autoload シリーズ関数が表示されるように、autoload 呼び出しスタックを緊急に使用する必要があります。 spl_autoload_register を使用して、複数のカスタム オートロード関数を登録できます。
PHP バージョンが 5.1 以降の場合は、spl_autoload を使用できます。 まず、spl のいくつかの関数を理解します。
spl_autoload は、 _autoload() のデフォルトの実装では、include_path で $class_name(.php/.inc) が検索されます。
Spl_autoload は自動ロードを実装します:
/*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();
/*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_autoload_register(array(__CLASS__, 'autoload')); public static function autoload($class) { ….. }
関連する推奨事項:
PHP で html_entity_decode を使用して HTML エンティティのエスケープを実装する
以上がPHPのautoLoad自動読み込み機構の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。