我通过 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 中缺少的单例用例?