数据库类中,数据访问对象不能使用数据库类中的方法


Database class, a data access object can't use a method of the database class

我创建了一个数据库类和一个数据库访问对象,这样我就可以实现一个值对象模式。

下面是数据库类的一部分和它的功能:

class Database {
    protected $conn = null;
    private $stmt;

    // create a connection
    public function __construct($dsn, $username, $passwd) {
        try {
            // mysql and pdo
            $this->conn = new PDO($dsn, $username, $passwd); 
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
        } catch (PDOException $e) {
            $this->get_error($e);
        }
    }
}

这个db类的一部分是我创建的函数num_rows

public function num_rows($query) {
    $this->stmt = $this->conn->prepare($query);
    if ($this->stmt) {
        $this->stmt->execute();
        return $this->stmt->rowCount();
    }
}

我也有这个DAO类,它可以做你实际看到的事情。

class Dao {
    protected $db = null;
    public function __construct() {
        $dbh = new Database('mysql:host=localhost;dbname=doorche', 'root', '');
         $this->db = $dbh->getConnection();
    }
//put your code here
}

当我在另一个类(例如loginDao)中扩展DAO类时,我无法访问*num_rows*

为什么会这样?

您需要按如下inherit Dao分类。

class Dao extends Database {

则在loginDao

class loginDao extends Dao {

现在loginDao也可以访问Database的方法