1

私の目的は、別の PHP ファイルで定義されているグローバル配列からデータを取得することです。私のコードはdatabase.phpファイル内で実行されており、使用したい配列はconfig.phpファイル内にあります。クラス内でグローバル配列にアクセスするのは良い考えではないことは理解していますが、いくつかの理由でアクセスしたいと考えています。

私のコードは以下の通りです:

config.php

$CONFIG = array();
// ...
$CONFIG["DATABASE"] = array();
$CONFIG["DATABASE"]["USERNAME"] = "user";
$CONFIG["DATABASE"]["PASSWORD"] = "pass";
$CONFIG["DATABASE"]["HOSTNAME"] = "127.0.0.1";
$CONFIG["DATABASE"]["DATABASE"] = "my_db";
// ...

データベース.php

require('config.php');

class Database
{
    protected   $m_Link;
    private     $m_User;
    private     $m_Pass;
    private     $m_Host;
    private     $m_Data;
    private     $m_bConnected;

    public function __construct()
    {
        global $CONFIG;
        $this->m_User = $CONFIG["DATABASE"]["USERNAME"];
        $this->m_Pass = $CONFIG["DATABASE"]["PASSWORD"];
        $this->m_Host = $CONFIG["DATABASE"]["HOSTNAME"];
        $this->m_Data = $CONFIG["DATABASE"]["DATABASE"];
        $this->m_bConnected = false;
        $this->Connect();
    }

    // ...
};

エラーは表示されません (データベース接続の失敗通知を除く)。

配列要素にアクセスできません。たとえば、の文字列で$CONFIG["DATABASE"]["USERNAME"]初期化されていても、空の値を返します。"user"config.php

クラス コンストラクター内でこのグローバル配列にアクセスできるようにするには、コードをどのように変更すればよいですか?

(注: PHP のバージョンは 5.3.0 です)

4

3 に答える 3

2

あなたのコードは正しいように見えるので、デバッグするだけでよいと思います。Database クラスのインスタンスを作成する前に $CONFIG を出力してみてください。$CONFIG は、コードのどこかで再定義/変更される可能性があります。また、配列内の 1 つの値だけをチェックするのではなく、var_dump/print_r を使用して配列全体を出力します。

于 2011-05-31T08:57:46.350 に答える
1

それ以外の

$CONFIG = array();

使用する

$GLOBALS['CONFIG'] = array();
于 2011-07-29T19:58:26.473 に答える
0

でどのようにグローバルが機能していないと思います__construct()。それがバグなのか、それともそのまま設計されているのかはわかりません。

コード用

<?php
class Test {
    public $value;

    function __construct() {
        global $value;
        $value = "I am a test.";
    }
}

$test = new Test();
echo $test->value;

上記のphpを実行しても何も表示されません。

ただし、global を使用せずに $this->value を使用すると、すべて正常に動作します。

<?php
class Test {
    public $value;

    function __construct() {
        $this->value = "I am a test.";
    }
}

$test = new Test();
echo $test->value;

あなたが理由を得ると主張する場合。おそらく __construct() はプロパティを初期化するための設計だと思います。$this->value = $value__construct() で多くのコードを使用しているようなコードもあります。したがって、php の設計者は、__construct() で global を使用するのは適切ではないと考えているのかもしれません。でも。結局、PHPマニュアルに言及されている単語が見つかりません。

于 2013-09-03T03:16:32.520 に答える