php定义的变量有空值

时间:2009-07-21 20:12:33

标签: php variables null

我有一些数据库信息存储在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行

5 个答案:

答案 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”关键字。它应该能满足你的需求。祝你好运!