• php单例模式


    链接:https://www.zhihu.com/question/35285158/answer/141024074
    来源:知乎
    /*
    单例设计模式 (单态)
        定义: 一个类 只能允许有 一个对象存在.
        1.不让进: 使类不能被实例化
        2.留后门: 设置静态方法
        3.给对象: 在静态方法里实例化该类
        4.判初夜: 判断是否是 第一次产生该类的对象
        5.设静态: 静态方法里 要使用静态属性
     */
    
    /*//1.不让进: 使类不能被实例化-----------------
    class Test
    {
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
    }*/
    
    /*//2.留后门: 设置静态方法--------------------
    class Test
    {
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
        }
    }*/
    
    /*//3.给对象: 在静态方法里实例化该类------------------
    class Test
    {
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
            return new self();//实例化一个对象给你
        }
    }*/
    
    /*//4.判初夜: 判断是否是 第一次产生该类的对象------------------
    class Test
    {
        private $obj = null;//属性值为对象,默认为null
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
            if ($this->obj === null) {
                $this->obj = new self();//实例化一个对象
            }
            //返回的属性 其实就是本对象
            return $this->obj;
        }
    }*/
    
    //5.设静态: 静态方法里 要使用静态属性------------------
    class Test
    {
        private static $obj = null;//属性值为对象,默认为null
        // 设置 一个封装的构造方法
        private function __construct()
        {
            //占位, 我就是不让你NEW我~~~
        }
        //后门
        public static function getObject()
        {
            echo "啊,我是后门,进吧!<br>";
            if (self::$obj === null) {
                self::$obj = new self();//实例化一个对象
            }
            //返回的属性 其实就是本对象
            return self::$obj;
        }
    }
    
    /*Test::getObject();//使用静态方法访问该类里的方法
    exit;*/
    
    $t1 = Test::getObject();
    $t2 = Test::getObject();
    $t3 = Test::getObject();
    $t4 = Test::getObject();
    $t5 = Test::getObject();
    $t6 = Test::getObject();
    $t7 = Test::getObject();
    $t8 = Test::getObject();
    
    //判断 两个对象 是否是同一个对象
    if ($t1 === $t6) {
        echo "哦, Yes! 是同一个实例<br>";
    } else {
        echo "哦, No! 不是同一个实例<br>";
    }
    
    第五步是成品,前面4步都是一步一步的推的!
  • 相关阅读:
    MySQL中查询表及索引大小的方法
    转:一套大而全的系统架构体系与具体落地方案
    [转]1年时间业务量疯长40倍,谈人人车的平台架构演进之路
    [转]如何实现“持续集成”?闲鱼把研发效率翻了个翻
    微服务介绍
    Python2.X和Python3.X的w7同时安装使用
    黑客与画家阅读体会
    Open Source 开发工具集
    volatile和不加volatile的区别
    VMware改变硬盘空间大小的方法
  • 原文地址:https://www.cnblogs.com/sensai-sun/p/6858040.html
Copyright © 2020-2023  润新知