3

我想从另一个类中实例化一个类,但是当我尝试在类 foo 中调用 db 的函数时它会失败,除非我声明 new 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()。

4

2 回答 2

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();
  }
}
于 2013-05-11T02:07:10.033 回答
2

PHP成员变量需要通过$this

class foo {
  private $db;

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

  public function update(){
    $this->db->query();
  }
}
于 2013-05-11T02:06:37.960 回答