繁体   English   中英

Poop连接到MySQL数据库的PHP oop继承

[英]PHP oop inheritance of PDO connection to mysql database

我创建了两个类USERADMIN ,并且admin扩展了user。

使用USER类的对象时,我可以从数据库中获取所需的数据,但是使用ADMIN对象时,则无法获取任何数据。 这些类如下:

        class USER
        {
            private $conn;
            public function __construct()
            {
              $database = new Database();
              $db = $database->dbConnection();
              $this->conn = $db;
            }
            public function runQuery($sql)
            {
              $stmt = $this->conn->prepare($sql);
              return $stmt;
            }

        ...some functions to query the DB

        }

class ADMIN extends USER
{
private $conn;

public function __construct()
{
  $database = new Database();
  $db = $database->dbConnection();
  $this->conn = $db;
}
...some other functions to query the DB
}

起初我没有包括构造函数,因为我读到admin将继承每个非private属性,因此这是我的第二次尝试,但是在两种情况下,我都收到此错误:

Call to a member function prepare() on a non-object任何想法我想念什么? 谢谢

更新:我在ADMIN类中具有以下功能:

public function getAppeals($user_id){
  $stmt = $this->conn->prepare("SELECT * FROM appeals WHERE lecturer_id = :lecturer_id");
  $stmt->execute(array(':lecturer_id' => $user_id));
  $userRow = $stmt->fetchall(PDO::FETCH_ASSOC);
  return $userRow;
}

产生错误的行是这样的:

$stmt = $this->conn->prepare("SELECT * FROM appeals WHERE lecturer_id = :lecturer_id");

这应该可以说明您的问题http://php.net/manual/zh/language.oop5.visibility.php

私有属性仅在定义它的类中可见。 但是,将其设置为protected将允许它从任何扩展USER的类中访问,因此假定您从ADMIN类运行父构造parent::__construct();parent::__construct(); ADMIN将可以看到它parent::__construct();

如果您进行了这些更改,它应该可以正常工作

class USER
{
    //private $conn;
    protected $conn;

    public function __construct()
    {
      $database = new Database();
      $db = $database->dbConnection();
      $this->conn = $db;
    }
    public function runQuery($sql)
    {
      $stmt = $this->conn->prepare($sql);
      return $stmt;
    }

...some functions to query the DB

}

class ADMIN extends USER
{

    public function __construct()
    {
        parent::__construct();
    }

    public function getAppeals($user_id){
       $stmt = $this->conn->prepare("SELECT * FROM appeals WHERE lecturer_id = :lecturer_id");
       $stmt->execute(array(':lecturer_id' => $user_id));

       $userRow = $stmt->fetchall(PDO::FETCH_ASSOC);

       return $userRow;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM