2010-10-02 4 views
-2

Я получаю следующее сообщение об ошибке при попытке вызвать метод из класса Singleton внутри другого класса.Вызов функции-члена в PHP

Вызов функции-функции члена() для объекта, не являющегося объектом.

+3

Код, пожалуйста ... – NullUserException

+0

Возможные причины: использование глобальной переменной '$ variable', без использования' global $ variable' или '$ GLOBALS ['variable']' – Lekensteyn

ответ

2

$db должно быть $this->db.

public function __construct() { 
    $this->db = Database::getInstance('localhost', 'database', 'root', '123456'); 
} 
+0

Теперь я получаю вызов для запроса функции-члена () на не-объекте в Database.class.php – Vinny

+0

@Vinny: У вас там такая же ошибка ... Все переменные-члены должны быть префиксом '$ this->' для доступа к методу ... – ircmaxell

0

Просто измените $db в конструкторе $this->db. В свойствах членов PHP обращается явная ссылка на объект $this.

Кроме того, вы совершили ту же ошибку в своем классе базы данных. Кроме того, указание метода connect() как статического не имеет большого смысла. Кроме того, если вы спросите меня, то квалификатор private будет более подходящим, чем public. Наконец, если вы не намерены обрабатывать исключение в другом месте, используйте только die() вместо echo.

public function connect($server, $database, $user, $pass) { 
    try { 
     $this->pdo = new PDO("mysql:host=$server;dbname=$database", $user, $pass); 
     $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    } catch(PDOException $e) { 
     echo "Error!"; 
    } 
} 

В методе query() также использовать $this->pdo вместо того, чтобы просто $pdo.

+0

Я сейчас get Call для функции-функции-члена() для не-объекта в Database.class.php – Vinny

0

Вам необходимо назначить $ pdo как $ this-> pdo в базе данных в дополнение к присвоению $ db $ this-> db в конструкторе Users.