我有一些数据库信息存储在config.inc.php中,我试图用它来访问我所拥有的类中的数据库,但由于某种原因,变量为null。继承人代码:
<?php
require_once 'dbinterface.php';
require_once 'config.inc.php';
class user {
...
function user($id) {
$this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
...
}
...
?>
这是config.inc.php:
<?php
$DB['host'] = '192.168.1.107';
$DB['user'] = '****';
$DB['pass'] = '****';
$DB['database'] = 'qa';
?>
我不知道为什么我会得到空值,但这是我的证据:
致命错误:未捕获的异常 消息'没有数据库'的'异常' 选中'in d:\研发\ PHP \ qanda \ dbinterface.php:18 堆栈跟踪:#0 d:\研发\ PHP \ qanda \ user.class.php(17): db-&gt; db(NULL,NULL,NULL,NULL)#1 d:\研发\ PHP \ qanda \ log.php(17): user-&gt; user('1')#2 {main}抛出 d:\研发\ PHP \ qanda \ dbinterface.php 第18行
答案 0 :(得分:4)
您必须将$DB
声明为global
才能使其正常工作:
global $DB;
$DB['host'] = '192.168.1.107';
$DB['user'] = '****';
$DB['pass'] = '****';
$DB['database'] = 'qa';
在你的班级定义中:
function user($id) {
global $DB;
$this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
...
}
答案 1 :(得分:3)
您遇到variable scoping问题。如果您的config.inc文件包含在全局上下文中,那么这应该有效:
function user($id) {
global $DB;
$this->db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
...
}
答案 2 :(得分:1)
您要包含类范围之外的文件。如果将需求移动到函数内部,它将按预期工作。
更好的选择是将其包含在构造函数中,循环遍历$DB
数组,并将其值分配给$this->DB
,以便您可以在类的任何函数中访问它。您还需要修改您的功能,以使用$this->DB
代替$DB
。
function __construct() {
require_once 'dbinterface.php';
$this->DB = array();
foreach ($DB as $key => $value) {
$this->DB[$key] = $value;
}
}
答案 3 :(得分:1)
通常,使用全局变量是个坏主意。在这种情况下,它可以工作,但它不是最佳的。最好的想法是使用定义。
define('DB_HOST', '192.168.1.107');
define('DB_USER', '****');
define('DB_PASS', '****');
define('DB_DATABASE', 'qa');
...
function user($id) {
$this->db = new db(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
...
}
答案 4 :(得分:0)
查看PHP help page on variable scope,特别是“globals”关键字。它应该能满足你的需求。祝你好运!