4

所以我有一个看起来像这样的数据库类

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

4 回答 4

2

您正在使用&=. 那等于$db = $db & $this->db。第一个通知就在那里,因为 PHP 对此一无所知$db(尚未声明)。第二个通知是因为你正在尝试做(null) & (object). First 将被转换为intfirst 然后“对象无法转换”显然会出现(因为 PHP 会尝试将整个表达式视为int

就是这样:您的对象变量设置正确,但您的$db变量是本地的,与它无关。你正在通过&按位与)对对象做一些奇怪的事情

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

于 2013-11-06T09:24:45.430 回答
1

尝试这个:

class todo {

  var $db;

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

  public function render($post) {
    $db = &$this->db;
  }
}
于 2013-11-06T09:22:58.490 回答
0

你的 todo 类应该使用__construct或带有类名的公共函数,例如

class todo {

    var $db;

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

    // OR

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

    ...
}
于 2013-11-06T09:25:06.493 回答
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;
    }
}
于 2013-11-06T09:26:33.503 回答