关注我

    我的微信
在线咨询 x
在线咨询
有什么可以帮到你
点击咨询

PHP设计模式汇总(3)—— PHP单例模式

简介PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。

单例模式


单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。


单例模式特点


1.只能有一个实例。

2.必须自行创建这个实例。

3.必须给其他对象提供这一实例。


那么为什么要使用PHP单例模式?


PHP单例模式的一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。


单例模式示例代码


<?php


// 判断,保证只有一个对象
class Single {
    private $rnd;
    private static $_instance = null;

    private function __construct() {
        $this->rnd = mt_rand(10000,99999);
    }
	
    // 私有化克隆函数,防止外界克隆对象
    private function  __clone(){}

    public static function getInstance() {
    
        if(self::$_instance === null) {
            self::$_instance = new self();
        }

        return self::$_instance;
    }
}




$s1 = Single::getInstance();
$s2 = Single::getInstance();

// 这里会打印出s1和s2的对象是一样的
print_r($s1);
print_r($s2);

// 代码中有private function  __clone(){}防止克隆
$s3 = clone $s2;
print_r($s3);


代码总结 


1. 需要一个保存类的唯一实例的静态成员变量(通常为$_instance私有变量)

2. 构造函数和克隆函数必须声明为私有(private)的,这是为了防止外部程序new类从而失去单例模式的意义

3. 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用


经典的设计模式:

PHP设计模式汇总(1)—— PHP简单工厂模式

PHP设计模式汇总(2)—— PHP抽象工厂模式

PHP设计模式汇总(3)—— PHP单例模式

PHP设计模式汇总(4)—— PHP观察者模式

PHP设计模式汇总(5)—— PHP责任链模式

PHP设计模式汇总(6)—— PHP装饰器模式

(后续待更新)