この記事は、php自動読み込みメカニズムの詳細な分析と紹介です
1. php
で自動読み込みを実装する方法1. require_once 、include_onceを手動でロードします。 2. 自動ロードには autoload を使用します。
3. 自動ロードには spl の autoload を使用します。
手動ロードの実装:
require_once 'a.php'; require_once 'b.php'; require_once 'c.php';
しかし、ロードするファイルがたくさんある場合、これは大丈夫でしょうか? 10 個、20 個、またはそれ以上の require_once を記述する必要がある場合はどうすればよいでしょうか?
autoload 読み込みの実装:
以下の内容の in.php ファイルを test ディレクトリに作成します。
echo '我是test下面的in.php<br />';
// 需要重载autoload方法,自定义包含类文件的路径 function autoload($classname) { $class_file = strtolower($classname).".php"; if (file_exists($class_file)){ require_once($class_file); } } @$test = new in(); // 执行到这里会输出 <SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">我是test下面的in.php</SPAN>
問題ありません、うまくいきました!ロード用に他のファイルを作成することもできますが、必要なファイルが多数あり、ディレクトリに分割する必要がある場合はどうすればよいでしょうか?
function autoload($class_name) { $map = array( 'index' => './include/index.php', 'in' => './in.php' ); if (file_exists($map[$class_name]) && isset($map[$class_name])) { require_once $map[$class_name]; } } new index();
このメソッドの利点は、クラス名とファイル パスがマッピングによってのみ維持されるため、ファイル構造が変更された場合にクラス名を変更する必要がないことです。マッピング内の対応する項目のみを変更するだけで十分です。
spl の autoload ローディングの実装:
spl の autoload 一連の関数は、autoload 呼び出しスタックを使用し、spl_autoload_register を使用して、幅広いアプリケーション シナリオで複数のカスタマイズされた autoload 関数を登録できます
• test ディレクトリ test ディレクトリの下に次の内容の in.php を作成します
<?php class in { public function index() { echo '我是test下面的in.php'; } } ?>
test ディレクトリの下に次の内容のloader.phpを作成します
<?php set_include_path("/var/www/test/"); //这里需要将路径放入include spl_autoload("in"); //寻找/var/www/test/in.php $in = new in(); $in->index();
•spl_autoload_register は関数を SPL オートロード関数スタックに登録し、loader.php を変更します
function AutoLoad($class){ if($class == 'in'){ require_once("/var/www/test/in.php"); } } spl_autoload_register('AutoLoad'); $a = new in(); $a->index();
•spl_autoload_register は複数のカスタマイズされたオートロード関数のアプリケーションを登録します
まず、 test ディレクトリに移動し、次の内容で inmod.mod.php を作成します:
<?php class inmod { function construct() { echo '我是mods下的in'; } }
次に、test ディレクトリに libs フォルダーを作成し、次の内容で inlib.lib.php を作成します:
<?php class inlib { function construct() { echo '我是libs下的in'; } }
最後に、次の内容のloader.phpをtestディレクトリに作成します
<?php class Loader { /** * 自动加载类 * @param $class 类名 */ public static function mods($class) { if($class){ set_include_path( "/var/www/test/mods/" ); spl_autoload_extensions( ".mod.php" ); spl_autoload( strtolower($class) ); } } public static function libs($class) { if($class){ set_include_path( "/var/www/test/libs/" ); spl_autoload_extensions( ".lib.php" ); spl_autoload( strtolower($class) ); } } } spl_autoload_register(array('Loader', 'mods')); spl_autoload_register(array('Loader', 'libs')); new inmod();//输出<SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是mods下的in</SPAN> new inlib();//<SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">输出</SPAN><SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是libs下的in</SPAN>
以上がPHPの自動読み込みメカニズムの詳細な研究の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。