在另一个类中自动加载数据库类?

时间:2011-07-03 14:02:27

标签: php database class constructor autoload

我有两个类,数据库和用户。在Database类中,我有连接数据库的功能。我希望能够在User类中与数据库建立连接。这就是我目前在用户类中所做的事情:

class User {

    function __construct() 
    {
        require_once 'database.class.php';
        $DBH = new Database();
        $DBH->connect();
    }

    function register_user()
    {
        $DBH->prepare('INSERT INTO users VALUES (:username, :password, :forename, :surname)');
        $DBH->execute(array(':username' => 'administrator', ':password' => '5f4dcc3b5aa765d61d8327deb882cf99', ':forename' => 'Richie', ':surname' => 'Jenkins'));
    }
}

我收到以下错误:

  

PHP致命错误:致电会员   函数prepare()对非对象

2 个答案:

答案 0 :(得分:0)

您应该阅读“范围”。 $DBH仅在__construct()中声明为本地。

纠正这一点很容易。只需添加

class User {
   private $DBH;

以及$DBH更改为$this->DBH的任何地方。也可以帮助阅读$this和成员变量。

答案 1 :(得分:0)

您需要将$DBH分配给类属性以允许其他类方法访问。目前$DBH__construct()的本地,不能在其外部使用

class User {

    private $dbh;

    public function __construct() {
        ... // your code
        $this->dbh = $DBH;
    }

}

然后在其他类方法中,您将使用$this->dbh调用该对象。