类未正确继承DB

时间:2013-11-06 09:17:22

标签: php oop pdo

所以我有一个类似于此的数据库类

class db{

    private $hostname = 'localhost';
    private $username = 'root';
    private $password = 'root';
    private $con;

    public function db(){
        try {
            $dbh = new PDO("mysql:host=$this->hostname;dbname=myDB", $this->username, $this->password);
        }catch(PDOException $e){
            echo $e->getMessage();
            exit();
        }
        $this->con = $dbh;
        echo 'Connected to database<br />';
    }

我的index.php

include('db.class.php');
include('todo.class.php');
include('dressTemplate.inc.php');

$db = new db;

$todo = new todo($db);

我的todo.class.php就是这样开始的

class todo{

function todo(db $db){
    $this->db = $db;
} 

public function render($post) {

    $db &= $this->db;

但后来我收到了这个通知

Notice: Undefined variable: db in todo.class.php on line 11

Notice: Object of class db could not be converted to int in todo.class.php on line 11

如何在todo.class.php中正确定义db?

4 个答案:

答案 0 :(得分:2)

您正在使用&=。这等于$db = $db & $this->db。第一个注意事项是因为PHP对$db一无所知(它尚未声明)。第二个通知是因为你试图做(null) & (object)。首先将首先转换为int然后将出现“无法转换对象”,显然(因为PHP将尝试将整个表达式视为int

就是这样:您的对象变量设置正确,但您的$db变量是本地的,与它无关。并且您通过&bitwise AND

对对象做了一些奇怪的事情

提示:不要使用旧的PHP4方式来定义类构造函数 - 除非您使用的是PHP4。在PHP5中,有__construct()魔术方法。

答案 1 :(得分:1)

试试这个:

class todo {

  var $db;

  __construct(&$db) {
    $this->db = $db;
  }

  public function render($post) {
    $db = &$this->db;
  }
}

答案 2 :(得分:0)

您的待办事项类应使用__construct或带有类名的公共函数,例如

class todo {

    var $db;

    __construct (db $db) {
        $this->db = $db;
    }

    // OR

    public function todo(db $db){
        $this->db = $db;
    } 

    ...
}

答案 3 :(得分:0)

您应该使用公共构造函数:__construct() 这对我来说很好:

class db{

    private $hostname = 'localhost';
    private $username = 'root';
    private $password = 'root';
    private $con;

    public function __construct(){
        try {
            $dbh = new PDO("mysql:host=$this->hostname;dbname=myDB", $this->username, $this->password);
        }catch(PDOException $e){
            echo $e->getMessage();
            exit();
        }
        $this->con = $dbh;
        echo 'Connected to database<br />';
    }
}



class todo{

    public function __construct(db $db){
        $this->db = $db;
    }
}