У меня ступор.
Есть singleton (dbhandler) (static) вызывается статической функцией getInstance().
Есть пользовательский класс со статическими функциями, без вызова экземпляра класса, проверка осуществляется следующим образом User:Authenticate();
Вопрос, как осуществить приватный экземпляр обработчика бд в пользовательском классе?
dbhandler.php (singleton)
user.php
Спасибо!
Есть singleton (dbhandler) (static) вызывается статической функцией getInstance().
Есть пользовательский класс со статическими функциями, без вызова экземпляра класса, проверка осуществляется следующим образом User:Authenticate();
Вопрос, как осуществить приватный экземпляр обработчика бд в пользовательском классе?
dbhandler.php (singleton)
<?php
// Singleton
class dbhandler
{
private static $_instance = null;
public static function getInstance()
{
if (!isset (self::$_instance))
self::$_instance = new PDO('mysql:host=localhost;port=3306;dbname=testdb;charset=utf8', 'root', '', array (
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
return self::$_instance;
}
public function __destruct()
{
self::$_instance = null;
}
}
user.php
<?php
class User extends dbhandler
{
private static $_data = null;
//
public static function Authenticate()
{
if (isset ($_COOKIE['user_data'])) {
//
//
//
$data = unserialize(
stripslashes($_COOKIE['user_data'])
);
$q = self::getInstance()->prepare('SELECT * FROM `user` WHERE (`id`=?) AND (`password`=?)');
$q->execute(
array (
$data['id'],
$data['password']
)
);
if ($q->rowCount() != 0) {
self::$_data = $q->fetch();
//
//
//
if ($_data['hash'] == $data['hash']) {
//
self::update();
//
//
//
return self::$_data;
}
}
}
}
private static function update()
{
//
//
//
$q = self::getInstance()->prepare('UPDATE `user` SET `joinDate`=? WHERE (`id`=?)');
$q->execute(
array (
time(),
self::$_data['id']
)
);
}
}
Спасибо!