0

変数をスーパーグローバルにしたいのですが、手続き型のスタイルを使用しているので、自分で変数を作成することはできないと思います。基本的に問題は、クエリを使用してセキュリティテーブルからWebサイトのすべてのセキュリティ制御を取得することです。メンテナンスモードがオン/オフかどうかを確認し、オンの場合はメンテナンスページの下のウェブサイトにリダイレクトしているので、各ページで変数のステータスを確認する必要があります$maintenance_status。これを行うには、各ページでそのクエリを呼び出す必要があります。未定義の変数というエラーが発生します。さらに、関数を作成してその関数ファイルを他のページに含めると、$db_connect(私のdb接続変数である)が未定義であり、このシーケンスに私のページが含まれていることが示されます。

include_once('connection.php');
include_once('functions.php');
 /*other scripts goes here*/

各ページでこのステータスを取得する方法はありますか?一般的なクエリ用に新しいファイルを作成しようと思いましたが、それはクリーンなソリューションですか?さらに、なぜ私が未定義の変数を表示しているのかよりもconnection.php前に含めた場合、インクルードを理解していないと思いますか?functions.phpfunctions.php$db_connect

4

2 に答える 2

1

define()を使用して、そのための定数を使用できます。定義は、スクリプトの実行ごとに1回設定でき、1回のスクリプトの実行中に変更することはできません。それらはスーパーグローバルであり、含まれているファイル全体でも同様です。

http://php.net/defineまたは単に

define('MY_CONSTANT', 'whatever');
define('MY_OTHER_CONSTANT', false);

function foo() {
    if (MY_OTHER_CONSTANT !== true) {
        echo MY_CONSTANT;
    }
}

foo();
于 2012-09-06T16:00:26.470 に答える
0

ファイル内のどこでエラーが発生するかについてのコードコンテキストがなければ、アドバイスを提供するのは困難です。たとえば、$ db_connectへの参照は関数内から行われますか?そうである場合、その関数内に宣言がない限り機能しませんglobal $db_connect(関数のスコープで未定義の$ db_connectではなく、グローバルスコープで$ db_connectを使用するため)。

globalいくつかの理由で関数内でこのような宣言を使用することは好みませんが(依存性注入を使用するか、静的シングルトン関数呼び出しを介してDB接続を取得したい)、それはおそらく別の機会の教訓です。

とにかく、ある種のinitスクリプト(connection.php inlcudeの後など)でクエリを作成し、メンテナンスモードがオンかオフかに関する定数を定義するのが最適な場合があります。このようなもの

// assuming you have already made DB query and have a value of true/false on a variable called $is_maint_mode
define('MAINT_MODE', $is_maint_mode);

MAINT_MODEこれにより、コードでグローバルに使用できる定数が得られます。

于 2012-09-06T15:59:29.047 に答える