单例模式概念 :一个类 只能允许有 一个对象存在
问题: 怎么做才能让这个类只能有一个对象?
提出这个问题 那我们就可以从类的入口 __construct 这个构造方法说起 private
是一个私有属性 通常我写继承的时候 构造方法都是public
把构造方法变成private
这样就不能实例化了 显然这不是我想要的结果 这时候我们就要留一个后门来处理实例化类 设置一个静态方法
看下面的例子
<?php
Class Singleton{
// 定义一个静态属性 存放实例
private static $Instance;
// 定义一个私有的构造方法
private function __construct(){}
// 创造一个对外的出口 来获取实例
public static function getInstance(){
// 来判断实例有没有创建 没有创建就处理创建实例
if( !(Self::$instance instanceof Self) ) {
Self::$Instance = new Self();
}
return Self::$Instance;
}
private function __clone(){}
}
$Obj1 = Singleton::getInstance();// object(Singleton)#1 (1) {}
$Obj2 = Singleton::getInstance();// object(Singleton)#1 (1) {}
// 分别打印obj1和obj2得出来的都是同一个实例化后的类 得出来的都是相同的实例 不会创建多个实例避免对内存造成影响
// 还有一种情况 防止clone一个类 只要在该类中 加入一个私有的clone的函数就可以避免clone
这个就是一个单例模式的简单案例.