经常会遇到某些对象在整个应用程序中只保留一个实例。在这种情况下,通常有两种选择:1、使用全局对象,2、利用单例模式。全局对象虽然完成这个功能,但是管理起来还是比较麻烦,很可能被误用,这样所有的地方都能对这个全局对象进行修改或者其他操作,导致这个全局对象改变了它应该保持的原有属性;然而,单例模式不仅可以完成这个功能需求,还可以通过一些设定使得该对象除了在此类中可以进行高级操作之外,其余地方只能进行应用操作。单例模式也是最经常用的模式之一,最常用到的地方是数据库连接操作对象。
下面是一个简单的例子:
<?php
class DbProxy
{
private static $pdo;
private function __construct()
{
self::$pdo = new PDO(
'mysql:host= 127.0.0.1; port=3306; dbname=test, test, 123456',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8';",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
}
//获取唯一对象
public function getInstance()
{
if(!self::$pdo)
{
$this->__construct();
}
return self::$pdo;
}
/**
*将clone也声明为私有,以防误用
*/
private function clone()
{
}
}
?>