Я получаю доступ к моей базе данных MySQL через PDO. Я настраиваю доступ к базе данных, и моя первая попытка состояла в следующем:
Первое, что я подумал, это global
:
$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');
function some_function() {
global $db;
$db->query('...');
}
Это считается плохой практикой. После небольшого поиска я оказался с шаблоном Singleton, который
"применяется к ситуациям, в которых должен быть один экземпляр класса."
В соответствии с примером в руководстве мы должны сделать следующее:
class Database {
private static $instance, $db;
private function __construct(){}
static function singleton() {
if(!isset(self::$instance))
self::$instance = new __CLASS__;
return self:$instance;
}
function get() {
if(!isset(self::$db))
self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd')
return self::$db;
}
}
function some_function() {
$db = Database::singleton();
$db->get()->query('...');
}
some_function();
Зачем мне этот относительно большой класс, когда я могу это сделать?
class Database {
private static $db;
private function __construct(){}
static function get() {
if(!isset(self::$rand))
self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd');
return self::$db;
}
}
function some_function() {
Database::get()->query('...');
}
some_function();
Этот последний работает отлично, и мне больше не нужно беспокоиться о $db
.
Как я могу создать меньший одноэлементный класс, или есть прецедент для одиночных игр, которые мне не хватает в PHP?