ホームページ  >  記事  >  バックエンド開発  >  関数での require_once の使用に関する詳細な説明。推奨されるエレガントな構成ファイルの定義方法_PHP チュートリアル。

関数での require_once の使用に関する詳細な説明。推奨されるエレガントな構成ファイルの定義方法_PHP チュートリアル。

WBOY
WBOYオリジナル
2016-07-13 10:26:26729ブラウズ

背景

プロジェクトでは、多くの人が構成ファイルで配列を使用して、レベル構成 level.config.php などのさまざまな構成項目を構成することを好みます。

コードをコピーします コードは次のとおりです:
$g_levelConfig = array(
'1'=>'初心者'、
'2'=>'高度な'、
);

プロジェクトのさまざまなモジュールが互いのメソッドを呼び出すことが多いため、エラーを避けるためにファイルが繰り返しインクルードされることがあります。一般に、誰もが require_one を使用し、次のようなファイルを関数にインクルードすることがよくあります。

コードをコピーします コードは次のとおりです:
関数 getNameByLeval($level){
$level = intval($level);
require_once CONFIG_PATH.'level.config.php';
If(!isset($g_levelConfig[$level])){
false を返す;
}その他{
return $g_levelConfig[$level];
}
}

質問

それで、これの何が問題なのでしょうか?まず次のコードの出力を見てください。level.config.php は上記の構成ファイルです


コードをコピーします コードは次のとおりです:
関数 getNameByLeval($level){
$level = intval($level);
require_once 'level.config.php';
If(!isset($g_levelConfig[$level])){
false を返す;
}その他{
return $g_levelConfig[$level];
}
}
var_dump(getNameByLeval(1));
var_dump(getNameByLeval(2));

出力は次のとおりです:


コードをコピーします コードは次のとおりです:
string(6) "初心者"
ブール(偽)

多くの人は、2 番目の出力が false であることに不思議に思います。これは実際には非常に簡単です。

require_once はファイルを 1 回だけインクルードします。ファイルが既にインクルードされている場合は、再度インクルードされません。

1. 初めて getNameByLeval(1) を実行すると、以前は level.config.php 設定ファイルがインクルードされていなかったため、今回は level.config.php ファイルがインクルードされてコンパイルされます。 $g_levelConfig 変数があります。すべての機能で

2. getNameByLeval(1) が 2 回目に実行されるとき、level.config.php 設定ファイルは以前に含まれており、今回は含まれていないため、$g_levelConfig 変数は存在せず、当然 false を返します。

解決策

1. グローバルな包含と関数への参照に作用します


コードをコピーします

コードは次のとおりです: require_once 'level.config.php';// 新しいコード
関数 getNameByLeval($level){
Global $g_levelConfig;//新しいコード
$level = intval($level);
If(!isset($g_levelConfig[$level])){
false を返す;
}その他{
return $g_levelConfig[$level];
}
}
var_dump(getNameByLeval(1));
var_dump(getNameByLeval(2)); この場合、 getNameByLeval 関数を使用するかどうかに関係なく、level.config.php 設定ファイルを含める必要があり、少し不経済です。


2. 関数に含めて適用する

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

関数 getNameByLeval($level){ $level = intval($level); Global $g_levelConfig;//新しいコード
require_once 'level.config.php';
If(!isset($g_levelConfig[$level])){
false を返す;
}その他{
return $g_levelConfig[$level];
}
}
var_dump(getNameByLeval(1));
var_dump(getNameByLeval(2));

これもとても乱雑で美しい感じがします


3. 設定ファイルは静的クラスを使用します

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


クラスレベルConfig{
パブリック静的 $level = array(
'1'=>'初心者',
'2'=>'上級',
                                                  }
ご使用にあたって

コードをコピーします コードは次のとおりです:
関数 getNameByLeval($level){
$level = intval($level);
require_once 'level.config.php';
If(!isset(levelConfig::$level[$level])){
false を返す;
}その他{
return levelConfig::$level[$level];
}
}

個人的には、この方法を使用して設定ファイルを定義することを強くお勧めします。変数を上書きするのは簡単ではありません。

http://www.bkjia.com/PHPjc/824669.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824669.html技術記事背景 プロジェクトでは、多くの人が構成ファイルで配列を使用して、レベル構成などのさまざまな構成項目を構成することを好みます。 level.config.php: 次のようにコードをコピーします: php $g_levelConfig = array(...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。