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

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

Jul 13, 2016 am 10:26 AM
once require 恵み 関数 設定ファイル

背景

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

コードをコピーします コードは次のとおりです:
<?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 は上記の構成ファイルです


コードをコピーします コードは次のとおりです:
<?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. グローバルな包含と関数への参照に作用します


コードをコピーします

コードは次のとおりです: <?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. 関数に含めて適用する

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

<?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. 設定ファイルは静的クラスを使用します

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


<?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];
}
}

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

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

golang 関数で新しい関数を動的に作成するためのヒント golang 関数で新しい関数を動的に作成するためのヒント Apr 25, 2024 pm 02:39 PM

golang 関数で新しい関数を動的に作成するためのヒント

C++ 関数の命名におけるパラメーターの順序に関する考慮事項 C++ 関数の命名におけるパラメーターの順序に関する考慮事項 Apr 24, 2024 pm 04:21 PM

C++ 関数の命名におけるパラメーターの順序に関する考慮事項

Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Apr 24, 2024 am 11:33 AM

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

Excel関数の公式の完全なコレクション Excel関数の公式の完全なコレクション May 07, 2024 pm 12:04 PM

Excel関数の公式の完全なコレクション

C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 Apr 21, 2024 am 10:21 AM

C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較

Win10 のユーザー プロファイルはどこにありますか? Win10 でユーザー プロファイルを設定する方法は? Win10 のユーザー プロファイルはどこにありますか? Win10 でユーザー プロファイルを設定する方法は? Jun 25, 2024 pm 05:55 PM

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

参照型を返す C++ 関数の利点は何ですか? 参照型を返す C++ 関数の利点は何ですか? Apr 20, 2024 pm 09:12 PM

参照型を返す C++ 関数の利点は何ですか?

C++ 関数での参照パラメータとポインタ パラメータの高度な使用法 C++ 関数での参照パラメータとポインタ パラメータの高度な使用法 Apr 21, 2024 am 09:39 AM

C++ 関数での参照パラメータとポインタ パラメータの高度な使用法

See all articles