PHP

php单例模式

什么是单例模式?

单例模式:一个类只有一个实例对象的设计模式

为什么要使用单利模式?

php大部分操作都是和各种数据库打交道,如果一个应用中存在大量的连接数据库操作,不使用单例,会消耗大量的内存资源和系统资源

单例模式的特点

私有的构造方法 (防止类外实例化)
私有的克隆方法 (防止通过克隆生成对象)
私有的静态属性 (保存类的实例)
公有的静态方法 (调取这个类相当一个接口 )

可以简称为三私一公

代码-->

有一天,你朋友(下面用A代替)问你(下面用C代替):“小C啊,给我个对象呗”
C:“稍等,马上给你写一个”
于是你写了这一段代码

class GirlFriend
{
    private $name;//女朋友的姓名
    private $age;//女朋友的年龄
    private $loa;//女朋友的颜值
    private static $obj = null;//设置一个静态属性,用来判断这个类有没有被实例化,默认是null
}

C:“呐,对象有了”
A:“这不行啊,属性都是空值,哪有啊”
C:“别急,接着看”
然后,你写一个构造方法,实例化的同时给属性赋值

   private function __construct($name,$age,$loa)
    {
        $this->name = $name;
        $this->age = $age;
        $this->loa = $loa;
    }

C:“这回可以了吧,想要啥样的就写啥样的”
A:“这次还可以,你说我能不能一直new,那我就有无数个对象了” A一脸坏笑
C:“放心,我不会对你这么好的”

    public static function getGirl($name,$age,$loa)
    {
        //判断静态属性是否为空,为空则去new自身的类并返回,不为空返回
        if (self::$obj == null) {
            return self::$obj = new GirlFriend($name,$age,$loa);
        }
        return self::$obj ;
    }

C:“先判断你有没有new,只允许你new一次”
A:“那我还可以...”
C:“打住,我知道你要干嘛”

   private function __clone()
    {
    }

C:“好了,拿去吧,谁都不能克隆你的对象了”
A:“你够狠,不过别人问我对象名字咋办啊,私有属性我不能说啊”
C:“嗯...这也是个问题,那就加个get吧”

    public function __get($name)
    {
        //property_exists  检查对象或类是否具有该属性
        if (property_exists($this,$name)){
            return $this->$name;
        }else{
            return "不存在";
        }
    }

C:“大功告成,拿去炫耀吧,对了,我顺手给你new了”
A:“是吗,我看看......你给我回来!”

    $girl = GirlFriend::getGirl('如花',20,'0');

这就是单例模式,你们学会了吗
附件是完整的代码,大家可以下载后慢慢研究

代码文件

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

支付宝扫一扫,向我赞赏

回复

This is just a placeholder img.