单例模式
单例模式简直就是无人不知,无人不晓,即使是一个刚刚入门不久的phper也听过其鼎鼎大名。那么其具体是做什么的我觉得也不用过多赘述。但具体我还是想说一下几点
- 单例模式让一个应用中只存在一个实例对象,减少了因多次new同一个对象而产生的内存消耗 。
- 其最经典的三私一共不多赘述,将在下面的代码中体现 。
- 这一点是我在其它文章中所看到的,单例模式被公认为是 反面模式,为了获得更好的可测试性和可维护性,请使用『依赖注入模式』。
代码详解
<?php
/**一个单例模式类**/
class Singleton
{
/**私有的静态成员变量,用于调取实例**/
private static $instance;
/**通过懒加载获得实例(在第一次使用的时候创建)**/
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
/**
* 不允许从外部调用以防止创建多个实例
* 要使用单例,必须通过 Singleton::getInstance() 方法获取实例
*/
private function __construct()
{
}
/**
* 防止实例被克隆(这会创建实例的副本)
*/
private function __clone()
{
}
/**
* 防止反序列化(这将创建它的副本)
*/
private function __wakeup()
{
}
}
/**具体使用**/
$class1 = Singleton::getInstance();
$class2 = Singleton::getInstance();
/*
**打印两个类可以发现他们两个是同一个实例
*/