课程名称:大话PHP设计模式
课程章节:单例模式
课程讲师:Rango
课程内容:
特点
- 代码运行时某个类只存在一个实例化的对象,多次获取该实例化的对象,也不会进行多次实例化
优点
- 项目中有些功能封装的类是不需要进行多次实例化的,比如连接数据库的类、请求信息的类;这种功能使用单例模式可以节省性能
需要注意的地方
- 使用单例模式获取类的实例化对象时不是使用new,而是使用类中的一个获取自身实例化对象的方法来获取,原理见代码
代码
class Db{
// 静态变量用来存储自身实例化的对象
static private $instanse;
// 私有的构造函数,防止外部使用new实例化该类
private function __construct() {}
// 私有的clone魔术方法,防止对象被克隆
private function __clone() {}
// 外部通过这个方法来获取实例化后的本类
static public function instanse() {
if(!self::$instanse) self::$instanse = new self();
return self::$instanse;
}
public function test() {
echo '调用了Db类的test方法';
}
}
// 多次调用类的instanse方法获取到也是获取到的相同的对象,可以通过输出中的#1看出来
$a = Db::instanse();
$b = Db::instanse();
var_dump($a);
var_dump($b);
/**
object(Db)#1 (0) {
}
object(Db)#1 (0) {
}
*/
课程收货
这是学习的第二个设计模式,目前学习的模式都比较简单,且易懂,但内容却没有一点水分,都是干货