如何解决在类构造函数中访问全局数组
| 我的目的是从另一个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手册中提到的单词。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。