一、概述
“单例模式”是一种常见的设计模式,顾名思义单例模式是为了保证在整个程序中只有一个类的实例供外界使用
二、核心
- 保证类只有一个实例
- 类的自行创建实例
- 禁止外部对该类进行实例化、克隆、序列化、继承
- PHP主要应用于数据库应用
- 属于设计模式中的“创建型设计模式”
三、架构图
四、代码示例
<?php
/*
* final 禁止类被继承
*/
final Class Singleton
{
/*
* 私有静态变量存储实例
*/
private static $instance;
/*
* 私有构造方法,禁止外部实例化
*/
private function __construct()
{
}
/*
* 私有魔术方法,禁止外部克隆
*/
private function __clone()
{
// TODO: Implement __clone() method.
}
/*
* 私有魔术方法,禁止外部反序列化
*/
private function __wakeup()
{
// TODO: Implement __wakeup() method.
}
/*
* 公有静态方法获取实例
*/
public static function getInstance()
{
if (is_null(static::$instance)) {
static::$instance = new self();
}
return static::$instance;
}
}
$singleton = Singleton::getInstance();
五、涉及的知识点
-
为什么使用静态变量?
静态变量在内存的全局区,内存中数据共享,保证数据唯一 -
static和self区别?
self获取的是代码区的类(所存在的类中)
static 获取的是堆区的类(类似于$this) -
为什么使用静态方法?
调用类的方法有两种new classname() 和 classname::func()
单例模式不允许外部实例化所以只能使用静态调用
只有静态方法才能调用静态属性