详解PHP设计模式之单例模式

103 阅读1分钟

单例模式: 跟名字所描述的一样,在所有调用过程中,这个类只需要实例化一次,减少外部通过new来多次实例化,形成多个实例;

主要应用场景:一般多数用于连接的操作,比如:数据库的连接、redis的连接

创建一个DB类,既然想给外部只调用一个实例,那么我们给外部调用的方法设置为静态的,静态方法内存中只占一份,在代码加载的时候就已经创建,实例化方法或类只有在new的时候才创建。每个实例化出来的对象都代表不同的实例,而静态只有一份。

class DB
{
    /**
    * 存储实例
    */
    private static $_instance = null;
    
    public function __construct()
    {
        //TODO
    }
    /**
    * 获取实例
    * @return object
    */
    public static function getInstance()
    {
        if (is_null(self::$_instance)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }
}

以上代码,我们从外部只需要调用DB::getInstance()这个方法,就能获取到这个类的实例,这个方法是属于实例的,而不是属于类的,下面我们进行测试:

$instance1 = DB::getInstance();
$instance2 = DB::getInstance();
var_dump($instance1);
var_dump($instance2);

结果:

$ php test.php
object(DB)#1 (0) {
}
object(DB)#1 (0) {
}

从结果来看,不管我们调用多少次这个getInstance()方法,它都是只有一个实例,从而实现了单例