我想从另一个类实例化一个类但是当我尝试在类foo中调用db的函数时它会失败,除非我使用新的db()并在同一个函数内调用该函数
class foo {
private $db;
public function __construct() {
$db = new db();
// if i call $db->query(); from here it works fine
}
public function update(){
$db->query();
}
}
class db {
public function __construct() {
}
public function query(){
echo "returned";
}
}
$new_class = new foo();
$new_class->update();
这段代码给出了一个错误,说我在第7行有一个未定义的变量db,并在非对象上调用成员函数query()。
答案 0 :(得分:4)
而不是$db
,您应该使用$this->db
。
在您的代码中,$db
是__construct
函数的本地,
public function __construct() {
$db = new db();
// $db is only available within this function.
}
您希望将其放入成员变量中,因此您需要使用$this
,
class foo {
private $db; // To access this, use $this->db in any function in this class
public function __construct() {
$this->db = new db();
// Now you can use $this->db in any other function within foo.
// (Except for static functions)
}
public function update() {
$this->db->query();
}
}
答案 1 :(得分:2)
需要通过$this
class foo {
private $db;
public function __construct() {
$this->db = new db();
}
public function update(){
$this->db->query();
}
}