所以我有一个类似于此的数据库类
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?
答案 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;
}
}