【发布时间】:2011-09-05 07:30:06
【问题描述】:
我的目标是从另一个 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"] 返回一个空值,即使它是用 config.php 中的 "user" 字符串初始化的。
我应该如何修改我的代码,以便在类构造函数中可以访问这个全局数组?
(注:PHP版本为5.3.0)
【问题讨论】:
-
"(注意:PHP 版本是 5.3.0)" -- 你有没有可能在某个地方也有命名空间声明?
-
@Denis:不,我没有在任何地方进行命名空间声明。
-
您想要这样做的“某些原因”(无论它们可能是什么)是错误的。此外,您不应该在 ctor 中调用 connect(),因为它正在起作用。当您需要连接而不是在创建对象时调用 connect。它不必连接到有效状态。
标签: php arrays class global globals