特点
单例模式是PHP中一种常见的设计模式,主要有以下几个特点:
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
实现
基于单例模式特点,要实现单例模式非常简单:
- 构造方法(
__constructor
)设为私有(必须自己创建实例,保证不被外部创建) - 关闭clone,关闭serialize(还是为了保证唯一)
- 一个静态(
static
)属性保存实例 - 一个静态(
static
)方法创建实例(因为不能被new
,所以只能是静态方法)
看起来已经很严密了,来个实际例子吧
final class Singleton
{
private static $instance;
private function __construct()
{
// Hide the constructor
}
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __clone()
{
// Disable cloning
}
private function __wakeup()
{
// Disable unserialize
}
}
使用
$singleton1 = Singleton::getInstance();
$singleton2 = Singleton::getInstance();
var_dump($singleton1 === $singleton2); // true