在 PHP 中,具有数据库访问权限的单例是否有用例?
我通过PDO访问我的MySQL数据库。我正在设置对数据库的访问,我的第一次尝试是使用以下方法:
我首先想到的是:global
$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');
function some_function() {
global $db;
$db->query('...');
}
这被认为是一种不好的做法。经过一番搜索,我最终得到了辛格尔顿模式,它
“适用于需要一个类的单个实例的情况。
根据手册中的示例,我们应该这样做:
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::$db))
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中缺少的单例用例?