0

わかりましたので、3 つのファイルを用意しました。例として、config.php、functions.php、および index.php を示します。

config.php には、サイトが動作するために必要なすべての変数、設定、データベースの詳細などがあります。functions.php では、動作させようとしている関数は次のとおりです。

function db_connect() {
    mysql_connect($app_config['mysql_server'], $app_config['mysql_username'], $app_config['mysql_password']) or db_die(__FILE__, __LINE__, mysql_error());
    mysql_select_db($app_config['mysql_database']) or db_die(__FILE__, __LINE__, mysql_error());

}

これが参照する必要があるのは、config.php で設定された変数です。

$app_config['mysql_username'] = "root";
$app_config['mysql_password'] = "password";

関数を使用する index.php では、config.php と functions.php の両方が必要ですが、PHP エラー ログでは次のようになります (インスタンスごとに複数回)。

[Mon May 28 02:02:46 2012] [error] [client <removed>] PHP Notice:  Undefined variable: app_config in /usr/home/<removed>/functions.php on line 11

functions.php にも config.php を含めてみましたが、役に立ちませんでした。なぜこれが機能しないのかについてのアイデアはありますか? 比較的単純だと思いますが、理解できません..

4

2 に答える 2

0

2 つのオプション: コントラクトまたはグローバル変数による

function db_connect() {
    global $app_config;
    mysql_connect($app_config['mysql_server'], $app_config['mysql_username'], $app_config['mysql_password']) or db_die(__FILE__, __LINE__, mysql_error());
    mysql_select_db($app_config['mysql_database']) or db_die(__FILE__, __LINE__, mysql_error());
}

// contract
function db_connect(array $app_config) {        
    mysql_connect($app_config['mysql_server'], $app_config['mysql_username'], $app_config['mysql_password']) or db_die(__FILE__, __LINE__, mysql_error());
    mysql_select_db($app_config['mysql_database']) or db_die(__FILE__, __LINE__, mysql_error());
}

もっと「エレガント」なことをしてクラスを作成することもできますが

于 2012-05-28T01:10:35.660 に答える
0

グローバル $app_config、その変数から何かを使用する前に、それを関数に入れたい

これは基本的に、この関数で使用するためにグローバル名前空間から $app_config 変数を取得することを意味します。PHP グローバルは、すべての関数で使用できますが、明示的に要求するまで、その関数の名前空間には関与しません。それがあなたに起こっていることです。変数を「要求」する前に変数を使用しています。

于 2012-05-28T01:10:41.307 に答える