Автозагрузка класса базы данных в другом классе? - PullRequest
0 голосов
/ 03 июля 2011

У меня есть два класса, База данных и Пользователь. В классе Database у меня есть функция для подключения к базе данных. Я хочу иметь возможность иметь соединение с базой данных в классе пользователя. Вот что я сейчас делаю в классе пользователя:

class User {

    function __construct() 
    {
        require_once 'database.class.php';
        $DBH = new Database();
        $DBH->connect();
    }

    function register_user()
    {
        $DBH->prepare('INSERT INTO users VALUES (:username, :password, :forename, :surname)');
        $DBH->execute(array(':username' => 'administrator', ':password' => '5f4dcc3b5aa765d61d8327deb882cf99', ':forename' => 'Richie', ':surname' => 'Jenkins'));
    }
}

Я получаю следующую ошибку:

Неустранимая ошибка PHP: вызов участника Функция prepare () для необъекта

Ответы [ 2 ]

0 голосов
/ 03 июля 2011

Вам необходимо присвоить $DBH свойству класса, чтобы разрешить доступ к другим методам класса.Прямо сейчас $DBH является локальным для __construct() и не может использоваться вне его

class User {

    private $dbh;

    public function __construct() {
        ... // your code
        $this->dbh = $DBH;
    }

}

Тогда в других методах класса вы вызовете этот объект с $this->dbh.

0 голосов
/ 03 июля 2011

Вы должны прочитать о «сфере».$DBH объявляется только локально в __construct().

Исправить это легко.Просто добавьте

class User {
   private $DBH;

, и там, где у вас есть $DBH, измените на $this->DBH.Может помочь прочитать о $this и переменных-членах.

...