ホームページ  >  記事  >  バックエンド開発  >  PHP 自動読み込みメカニズムの詳細な分析_PHP チュートリアル

PHP 自動読み込みメカニズムの詳細な分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:07:241129ブラウズ

1. phpで自動ロードを実装する方法
1. require、include、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 メソッドを使用してコードを簡素化できます。

__autoload 実装:
次の内容の in.php ファイルを test ディレクトリに作成します。

コードをコピーします コードは次のとおりです:

echo 'I am in.php under test
';

次に、次の内容でテストディレクトリにloader.phpを作成します。コンテンツ。 " .php";
if (file_exists($class_file)){
require_once($class_file) }@$test = new in(); // ここで実行すると、 I am in.php under test
問題ありません、うまくいきました!ロード用に他のファイルを作成することもできますが、必要なファイルが多数あり、ディレクトリに分割する必要がある場合はどうすればよいでしょうか?

現時点では、ロードするファイルを見つけるためにマッピングを使用するように、loader.php を変更する必要があります。



コードをコピーします

コードは次のとおりです:


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();

このメソッドの利点クラス名とファイル パスはマッピングを使用してのみ維持されるため、ファイル構造が変更された場合、クラス名を変更する必要はなく、マッピング内の対応する項目のみを変更する必要があるということです。

ただし、__autoload はプロジェクト内で 1 回しか使用できません。自分のプロジェクトが他の人のプロジェクトを参照している場合、自分のプロジェクトにも __autoload があり、他の人のプロジェクトにも __autoload が存在するため、2 つの __autoload が競合します。これは間違いなく非常に面倒であり、アプリケーションのシナリオが 1 つだけになります。

spl の autoload ローディングの実装:


spl の autoload 一連の関数は、autoload 呼び出しスタックを使用し、spl_autoload_register を使用して、幅広いアプリケーション シナリオで複数のカスタマイズされた autoload 関数を登録できます。

•次の内容の in.php を test ディレクトリに作成します


コードをコピーします

コードは次のとおりです:
class in {
public functionindex() {
echo 'I am test The Following in.php';}

}

?>
testディレクトリに次の内容のloader.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 __autoload 関数スタックに登録し、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ディレクトリにmodsフォルダを作成し、phpの中身を作成し​​ます。は次のとおりです:
コードをコピーします コードは次のとおりです:

class inmod
{
function __construct()
{
echo 'I am in' under mods;
}
}

次に、テスト ディレクトリに libs フォルダーを作成し、次の内容で inlib.lib.php を作成します:
コードをコピーします コードは次のとおりです:

class inlib
{
function __construct()
{
echo 'I am in under libs';
}
}

最後に、次の内容でテストディレクトリにloader.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( strto lower($class) );
}
}
public static function libs($class) {
if($class){
set_include_path( "/var/www/test/libs/" );
spl_autoload_extensions( ".lib.php" );
spl_autoload( strto lower($class) );
}
}
}
spl_autoload_register(array('Loader ', 'mods'));
spl_autoload_register( array(' Loader', 'libs'));
new inmod();//出力MOD
new inlib();//output のライブラリの下にあります

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327549.html技術記事 1. PHP で自動ロードを実装する方法 1. require、include、require_once、および include_once を使用して手動でロードします。 2. 自動ロードには __autoload を使用します。 3. spl の autoload を使用して...

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