在类构造函数中访问全局数组

问题描述

| 我的目的是从另一个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\";
// ...
database.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.PHP
中用
\"user\"
字符串进行了初始化,
$CONfig[\"DATABASE\"][\"USERNAME\"]
仍返回空值。 我应该如何修改我的代码,以便可以在类构造函数中访问此全局数组? (注意:PHP版本为5.3.0)     

解决方法

        您的代码看起来正确,所以我认为您应该对其进行调试。在创建数据库类实例之前,尝试输出$ CONFIG,$ CONFIG可能会在代码中的某处重新定义/更改。并且不要只检查数组中的一个值-使用var_dump / print_r输出整个数组。     ,        代替
$CONFIG = array();
采用
$GLOBALS[\'CONFIG\'] = array();
    ,        我认为某些国家在ѭ9中不起作用。我不确定这是错误还是按原样设计。 对于代码
<?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()可以用来初始化属性。 code12ѭ之类的代码在__construct()中使用很多。因此,也许php设计人员认为在__construct()中使用global并不是一种好习惯。然而。毕竟我找不到在php手册中提到的单词。