单例模式(Singleton)

2018-08-19  本文已影响0人  萧格

什么是单例模式?

根据这个名称,我们很容易了解到,单例模式指的是在整个应用中只有一个对象实例的设计模式。

为什么要用单例模式?

php常常和数据库打交道,如果在应用中如果频繁建立连接对象,进行new操作的话,会消耗大料的系统内存资源,这并不是我们希望看到的。再则,在团队合作项目中,单例模式可以有效避免不同程序员new自己的对象,造成人为的系统消耗。

实例

<?php

class Singleton {
    //随机数
    public $randNo;

    //用于保存实例
    private static $_instance;

    //构造函数为私有,防止创建对象
    private function __construct() 
    {
        $this->randNo = rand(1,9999);
    }

    //创建一个用于时利和对象的方法,如果不存在一个类的实例属性,就创建一个,否则就取这个实例属性。
    public static function getInstance()
    {
        if(!(self::$_instance instanceof self)) {
            self::$_instance = new self;
        }
        return  self::$_instance;
    }
    //防止对象被复制
    public function __clone()
    {
        trigger_error('Clone is not allowed!');
    }
    //防止反序列化后创建对象
    public function __wakeup()
    {
        trigger_error('Unserialize is not allowed!');
    }
}

//类内部实例化,外部无需实例化自接取实例
$s1 = Singleton::getInstance();
$s2 = Singleton::getInstance();

var_dump($s1,$s2);
//输出结果:两个对象是一样的,说明只实例化一次
//object(Singleton)#1 (1) { ["randNo"]=> int(7526) } 
//object(Singleton)#1 (1) { ["randNo"]=> int(7526) }

?>
上一篇下一篇

猜你喜欢

热点阅读