Есть (как минимум) три способа справиться с этим. Самый переносимый и часто рекомендуемый метод называется «внедрение зависимостей», при котором вы передаете дескриптор базы данных в свой класс через __construct()
и сохраняете его в переменной класса. Требуется доступ к нему с $this->db
, как вы не хотели делать.
class Person {
// Member to hold the db handle
public $db;
public function __construct($db_handle) {
// Assign the handle to a class member variable in the constructor
$this->db = $db_handle;
}
public function otherFunc() {
$this->db; // do something
}
}
$person = new Person($db_handle);
Следующим методом будет создание экземпляра $db_handle
внутри конструктора, а не его передача. Это немного сложнее для тестирования и отладки.
class Person {
public $db;
public function __construct() {
$this->db = PDO_DBConnect::getInstance();
}
}
Наконец, вы можете назвать $db_handle
как global
всякий раз, когда вы используете его в своем классе. Это, пожалуй, самый трудный для чтения и отладки.
class Person {
public function __construct() {
global $db_handle;
}
public function otherFunc() {
global $db_handle;
$db_handle; // do something
}
}