美文网首页
单例模式(Singleton)

单例模式(Singleton)

作者: 萧格 | 来源:发表于2018-08-19 00:11 被阅读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) }
    
    ?>
    

    相关文章

      网友评论

          本文标题:单例模式(Singleton)

          本文链接:https://www.haomeiwen.com/subject/fzmqiftx.html