PHP单例模式_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHP单例模式

PHP单例模式

 2018/3/26 11:47:10  青春..荒唐  程序员俱乐部  我要评论(0)
  • 摘要:【前言】本文总结下PHP单例模式相关【主体】单例模式简单理解:单例就是类只能被实例化一次,只能得到一个对象购物商场用到单例模式思路:按步骤分为1.创建普通类;2.保护构造方法,封装起来(保护后不能调用);3.所以要在封装后在内部调用,从而实现对外开放一个接口;4.设为静态,移除控制权,从而不实例化调用;5.添加判断;6.final禁止继承单个实例对象,即只能实例化一个对象①普通类的实例<?phpclassSingle{public$rand
  • 标签:PHP 模式 单例模式

【前言】??

? ? ?本文总结下PHP单例模式相关

?

【主体】单例模式

简单理解:单例就是类只能被实例化一次,只能得到一个对象

购物商场用到单例模式

思路:按步骤分为

? ? ?1. 创建普通类;2. 保护构造方法,封装起来(保护后不能调用);3. 所以要在封装后在内部调用,从而实现对外开放一个接口

? ? ?4.设为静态,移除控制权,从而不实例化调用;5.? 添加判断;6. final禁止继承

单个实例对象,即只能实例化一个对象

①普通类的实例

class="php"><?php
    class Single{
        public $rand;
        public function __construct(){
            $this->rand = mt_rand(10,300);//mt_rand()随机数
        }
    }
    var_dump(new Single());//115
    var_dump(new Single());//148
?>

?

这里我实例化了类两次,得到两个对象,且两次数值不一样。由此总结出一个类可以实例化出多个对象。

②单例模式案例

实例化放到类里,加上条件判断

<?php
    class Single{
        public $rand;
        static public $ob;
        protected  function __construct(){
            $this->rand = mt_rand(10,300);//随机数
        }
        static public function out(){
            if (Single::$ob === null) {//判断是否实例化
                Single::$ob = new Single();
            }
            return Single::$ob;
        }
    }
    var_dump(Single::out());//输出222
    var_dump(Single::out());//输出222
?>

?

两次输出一样

上例还未完成,因为继承后的子类里再次实例化时,还是会产生多个不同结果

<?php
    class Single{
        public $rand;
        static public $ob;
        //final不允许被子类重写
        protected  function __construct(){
            $this->rand = mt_rand(10,300);//随机数
        }
        static public function out(){
            if (Single::$ob === null) {//判断是否实例化
                Single::$ob = new Single();
            }
            return Single::$ob;
        }
    }
    class Test extends Single{
        public function __construct(){
            echo rand(20,300);//此处被子类重写
        }
    }
    new Test();
    new Test();
?>

?

对此我们用final来禁止重写,因为final类不能被继承,且final方法不能被子类重写

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

.

发表评论
用户名: 匿名