関数での require_once の使用に関する詳細な説明。推奨されるエレガントな構成ファイルの定義方法_PHP チュートリアル。
Jul 13, 2016 am 10:26 AM
once
require
恵み
関数
設定ファイル
背景
プロジェクトでは、多くの人が構成ファイルで配列を使用して、レベル構成 level.config.php などのさまざまな構成項目を構成することを好みます。
コードをコピーします コードは次のとおりです:
<?php
$g_levelConfig = array(
'1'=>'初心者'、
'2'=>'高度な'、
);
プロジェクトのさまざまなモジュールが互いのメソッドを呼び出すことが多いため、エラーを避けるためにファイルが繰り返しインクルードされることがあります。一般に、誰もが require_one を使用し、次のようなファイルを関数にインクルードすることがよくあります。
$g_levelConfig = array(
'1'=>'初心者'、
'2'=>'高度な'、
);
コードをコピーします コードは次のとおりです:
関数 getNameByLeval($level){
$level = intval($level);
require_once CONFIG_PATH.'level.config.php';
If(!isset($g_levelConfig[$level])){
false を返す;
}その他{
return $g_levelConfig[$level];
}
}
質問require_once CONFIG_PATH.'level.config.php';
If(!isset($g_levelConfig[$level])){
false を返す;
}その他{
return $g_levelConfig[$level];
}
}
それで、これの何が問題なのでしょうか?まず次のコードの出力を見てください。level.config.php は上記の構成ファイルです
コードをコピーします コードは次のとおりです:
<?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));
出力は次のとおりです:
$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. グローバルな包含と関数への参照に作用します
コードをコピーします
コードは次のとおりです:
<?php
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. 関数に含めて適用する
$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. 関数に含めて適用する
コードをコピーします
コードは次のとおりです:
<?php
関数 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. 設定ファイルは静的クラスを使用します
false を返す;
}その他{
return $g_levelConfig[$level];
}
}
var_dump(getNameByLeval(1));
var_dump(getNameByLeval(2));
これもとても乱雑で美しい感じがします
3. 設定ファイルは静的クラスを使用します
コードをコピーします
コードは次のとおりです:
<?php
クラスレベル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];
}
}
個人的には、この方法を使用して設定ファイルを定義することを強くお勧めします。変数を上書きするのは簡単ではありません。 $level = intval($level);
require_once 'level.config.php';
If(!isset(levelConfig::$level[$level])){
false を返す;
}その他{
return levelConfig::$level[$level];
}
}
)
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7312
9


Java チュートリアル
1624
14


CakePHP チュートリアル
1347
46


Laravel チュートリアル
1259
25


PHP チュートリアル
1207
29



Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか?

Win10 のユーザー プロファイルはどこにありますか? Win10 でユーザー プロファイルを設定する方法は?
