Задать вопрос
@JEYn70

Ошибка php не работает сингелтон, как исправить?

Есть файл с классом:
<?
namespace EvgenyKozin\Database;
/**
 * 
 */
class Database {
	private static $_instance = null;
	private function __construct() {
		$this->_instance = new \PDO('mysql:host=' . 
			DB_HOST . ';dbname=' . 
			DB_NAME,
			DB_USER,
			DB_PASS,
			[\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
	}
	protected function __clone() {
		// ограничивает клонирование объекта
	}
	static public function get_Instance() {
		if(is_null(self::$_instance)) {
		self::$_instance = new self();
		}
		return self::$_instance;
	}
}
?>

Есть место где успешно получается этот сингелтон:
$db = EvgenyKozin\Database\Database::get_Instance();

Но при попытке:
$password_q = $db->quote($password);
Говорит что я пытаюсь запользовать не объявленный метод.

Fatal error: Uncaught Error: Call to undefined method EvgenyKozin\Database\Database::quote() in XXXXXXXXXXXXXXXXXXXXXXXX\index.php:7
Stack trace: #0
XXXXXXXXXXXXXXXXXXXXXXXX\index.php(18): require_once() #1
{main} thrown in XXXXXXXXXXXXXXXXXXXXXXXX\index.php on line 7
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@JEYn70 Автор вопроса
<?
namespace EvgenyKozin\Database;
/**
 * 
 */
class Database {
	private static $_instance = null;
	private function __construct() {}
	protected function __clone() {}
	public static function get_Instance() {
    	if(self::$_instance == null) {
        	self::$_instance = new \PDO('mysql:host=' . 
			DB_HOST . ';dbname=' . 
			DB_NAME,
			DB_USER,
			DB_PASS,
			[\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
    	}
    	return self::$_instance;
	}
}
?>

Вообщем вот так заработало вроде, но вот с жестким сравнением при === работать отказалось.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
php666
@php666
PHP-макака
класс для БД не должен быть одиночкой
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
class Database extends \PDO
Иначе у вас не наследуются свойства и методы PDO.
Ответ написан
xEpozZ
@xEpozZ
Веб-разработчик
Потому что вы в $_instance кладете Database, а хотели положить PDO
public static function get_Instance() {
    if(self::$_instance === null)) {
        self::$_instance = new \PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, 
 [\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
    }

    return self::$_instance;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы