【问题标题】:Autoloading a database class within another class?在另一个类中自动加载数据库类?
【发布时间】:2011-07-03 14:02:27
【问题描述】:

我有两个类,数据库和用户。在 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()

【问题讨论】:

    标签: php database class constructor autoload


    【解决方案1】:

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

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

    class User {
       private $DBH;
    

    无论你有$DBH 更改为$this->DBH。可能有助于阅读 $this 和成员变量。

    【讨论】:

    • 我收到此错误:PHP 致命错误:调用未定义方法 Database::prepare()
    • 这意味着Database 类没有名为prepare() 的方法。它的实现方式是什么?
    • 我有点迷茫,为什么不能使用 PDO prepare 功能?
    • @ritch 那么你必须使用 PDO
    【解决方案2】:

    您需要将您的$DBH 分配给一个类属性以允许在其他类方法中进行访问。现在$DBH__construct() 本地的,不能在它之外使用

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      相关资源
      最近更新 更多