如何理解PHP单例模式


PHP设计模式 之 单例模式

理解

wiki百科: 单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。单例模式就是让类的一个对象成为系统中唯一的实例,避免大量的new操作去消耗资源。

特点

某一个功能只能实例化一个对象

使用目的

减少new操作,即可减少内存的消耗,因为new操作会消耗大量的内存。

PHP单例模式的实现要求

  1. 一个private的__construct是必须的,单例类不能在其他类中被实例化,只能被自身实例化;
  2. 拥有一个保存类的实例的静态成员变量;
  3. 一个静态的public方法用来实例化这个类,并访问这个类的实例;

总结

核心就是 三私一公

  1. 私有化的静态变量 -> 存储类的实例化对象
  2. 私有化的构造方法 -> 避免外部类new 对象
  3. 私有化的克隆方法 ->__clone 防止克隆新对象
  4. 公共的静态方法 -> 生产对象,供外界获取

PHP代码实现

/**
* php-redis 单例模式实现
*/
class RedisManager
{
    //私有的成员用来保存类的实例
    private static $redisobj = null;

    //私有的构造函数阻止在类的外部实例化
    private function __construct()
    {
    }

    //私有的__clone()阻止clone对象
    private function __clone()
    {
    }

    //公有的方法用来获取类的实例
    public static function getInstance()
    {
        if (!(self::$redisobj instanceof self)) {
            self::$redisobj = new RedisManager;
            //self::$redisobj = new self;
        }

        $rdobj = self::$redisobj;
        return $rdobj->connrds();
    }

    private function connrds()
    {
        try {
            $redis = new Redis();
            $redis->connect('127.0.0.1', 6379);
            $redis->auth('');
        } catch (Exception $e) {
            echo $e->getMessage() . '<br/>';
        }

        return $redis;
    }
}

微信扫码关注公众号-刘小七的技术站,不定期更新编程的奇淫巧计 ~

您的每一份打赏,都是对刘小七原创的支持 ~ 笔芯

声明:ITLXQ|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 如何理解PHP单例模式


与人为善,比聪明更重要。