我的目标是从另一个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["DATABASE"]["USERNAME"]
即使在"user"
中使用config.php
字符串进行初始化,也会返回空值。
我应该如何修改我的代码,以便可以在类构造函数中访问此全局数组?
(注意:PHP版本是5.3.0)
答案 0 :(得分:2)
您的代码看起来正确,所以我认为您应该只调试它。在创建Database类的实例之前尝试输出$ CONFIG,可以在代码中的某处重新定义/更改$ CONFIG。并且不要只检查数组中的一个值 - 使用var_dump / print_r输出整个数组。
答案 1 :(得分:1)
而不是
$CONFIG = array();
使用
$GLOBALS['CONFIG'] = array();
答案 2 :(得分:0)
我认为全局在__construct()
中无法发挥作用。我不确定它是否是一个错误,或者它是按原样设计的。
代码
<?php
class Test {
public $value;
function __construct() {
global $value;
$value = "I am a test.";
}
}
$test = new Test();
echo $test->value;
当php运行时你将看不到任何内容。
但是,如果您不使用全局,但使用$ this-&gt;值,一切正常。
<?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手册中找不到一句话。