Php 在类构造函数中访问全局数组
我的目标是从另一个PHP文件中定义的全局数组中检索一些数据。我的代码在Php 在类构造函数中访问全局数组,php,arrays,class,global,globals,Php,Arrays,Class,Global,Globals,我的目标是从另一个PHP文件中定义的全局数组中检索一些数据。我的代码在database.php文件中运行,我要使用的数组在config.php文件中。我知道在类内访问全局数组不是一个好主意,但出于某些原因,我想这样做 我的代码如下: config.php $CONFIG = array(); // ... $CONFIG["DATABASE"] = array(); $CONFIG["DATABASE"]["USERNAME"] = "user"; $CONFIG["DATABASE"]["PA
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";
// ...
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();
}
// ...
};
database.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";
// ...
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”]
返回一个空值,即使它是用CONFIG.php中的“user”
字符串初始化的
我应该如何修改我的代码,以便它可以在类构造函数中访问这个全局数组
(注意:PHP版本是5.3.0)您的代码看起来不错,所以我认为您应该调试它。在创建数据库类实例之前,请尝试输出$CONFIG,$CONFIG可能会在代码中的某个地方被重新定义/更改。而且不要只检查数组中的一个值——用var\u dump/print\r输出整个数组。而不是
$CONFIG = array();
使用
我认为一些全局性的东西在\uuu construct()
中不起作用。我不确定这是一个bug还是按原样设计的
代码
<?php
class Test {
public $value;
function __construct() {
global $value;
$value = "I am a test.";
}
}
$test = new Test();
echo $test->value;
”(注意:PHP版本是5.3.0)“--你有没有可能在某个地方也进行了名称空间声明?@Denis:没有,我没有在任何地方进行名称空间声明。你想这样做的“某些原因”(不管是什么)是错误的。此外,您不应该在ctor中调用connect(),因为这是在做工作。在需要连接时调用connect,而不是在创建对象时调用connect。它不必连接就可以处于有效状态。