要点
设计模式之一,单例模式,顾名思义就是只有一个实例,实现单例模式应该考虑以下几个要点
- 不能被主动实例化
- 必须提供一个获取对象实例的方法
- 不能被克隆
综上几个原因, 采用三私一公
的方法, 来实现一个单例模式
何谓三私一公
- 私有构造函数, 防止从外部主动实例对象
- 私有__clone方法, 防止克隆该对象
- 私有静态属性,存储当前类的实例
- 公有静态方法, 返回当前类的实例
实现
综上所林述, 代码如下
class SingleDemo {
/**
* @var self 私有的静态属性用来存储当前类的实例
*/
private static $instance;
/**
* 私有的构造方法防止从外部实例化该类
*/
private function __construct()
{
}
/**
* 私有的 __clone方法防止克隆
*/
private function __clone()
{
}
/**
* 公有的静态方法, 用来获取当前类的实例
* @return self
*/
public static function getInstance()
{
if (!self::$instance instanceof self) {
self::$instance = new self();
}
return self::$instance;
}
}
使用getInstance
方法来获取类的实例
$singleDemo = SingleDemo::getInstance();