0

Config.php:

$settings = array();

$settings['mysqlhost'] = 'localhost'; // Mysql hostname
$settings['mysqluser'] = '**'; // Mysql username
$settings['mysqlpass'] = '**'; // Mysql password
$settings['mysqldatb'] = '**'; // Mysql database

関数.php:

include_once('config.php'); 

function si_connect_db(){

    $connection = mysql_connect($settings['mysqlhost'], $settings['mysqluser'], $settings['mysqlpass']);
    $selectdb = mysql_select_db($settings['mysqldatb'], $connection);

    if($connection){
        if($selectdb){
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

今私が例えばするとき:

include_once('functions.php');
si_connect_db();

接続されていません...どうすればよいですか?

4

5 に答える 5

3

関数の外部で宣言されたPHP変数は、デフォルトでは関数の内部には表示されません。


関数の外部で変数を宣言し、その変数をその関数の内部で表示したい場合は、次のglobalキーワードを使用する必要があります。

function si_connect_db(){

    global $settings; // Make $settings visible inside the function

    $connection = mysql_connect($settings['mysqlhost'], $settings['mysqluser'], $settings['mysqlpass']);
    $selectdb = mysql_select_db($settings['mysqldatb'], $connection);

    ...


詳細については、マニュアルの「可変スコープ」セクションを参照してください。

于 2011-02-26T13:51:38.527 に答える
2

$settingsグローバル変数として作成する必要があります

function si_connect_db(){
   global $settings;

http://php.net/manual/en/language.variables.scope.php

于 2011-02-26T13:50:56.100 に答える
2

global関数でキーワードを使用して、それ$settingsがグローバルであることを関数に通知する必要があります。

代わりに、次のdefine()例を使用してグローバル定数を定義することをお勧めします。

define(MYSQLHOST, 'localhost');

globalそうすれば、構成設定を定義するためにキーワードを使用する必要はありません。

于 2011-02-26T13:52:39.217 に答える
1

これはスコープの問題です。基本的$settingsに、関数には表示されませんsi_connect_db

あなたがすべき$settingsことは、関数にパラメータとして渡すことsi_connect_dbです。これは代わりにで達成できglobalますが、グローバルを使用することは悪い習慣であり、多くの理由で眉をひそめています。テスト容易性、保守容易性、可読性、および一般的な OOP 設計 (カプセル化を破るため)。

function si_connect_db($settings) {
    // do stuff here
}

それで:

include_once('functions.php');
si_connect_db($settings);
于 2011-02-26T13:59:55.377 に答える
0

関数内に設定ファイルを含める必要があります。神のためにグローバルスコープを使用することは避けてください。接続するだけで設定ファイルが呼び出されるので、これもお勧めします。私の方法では、接続する必要があるたびに、すべてのアプリのページに設定ファイルを含めることを忘れることもできます。キーワードglobalの使用は、単なるハックです。

于 2011-02-26T14:13:46.083 に答える