zoukankan      html  css  js  c++  java
  • 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步都是一步一步的推的!
  • 相关阅读:
    VS2008正式版序列号
    清空SQL Server数据库中所有的用户表
    [原创]JavaScript调用Button的服务器端事件
    动态加载枚举 到 DropdownList
    [转载]静态构造函数
    SQL 事务 [两种]
    Jpg文件格式[参考]
    Delegate Event
    javascript 操作cookie类
    [共享]一个文件上传的控件,绝对是精品源码
  • 原文地址:https://www.cnblogs.com/sensai-sun/p/6858040.html
Copyright © 2011-2022 走看看