【PHP-设计模式】单例模式

author:咔咔

wechat:fangkangfk

做什么:这是一份单例模式的代码,我们需要对他进行debug调试,查看运行步骤

文件:就是下面的这份代码,直接拿过去就可以用

测试:使用debug

为什么使用:就拿链接数据库来说,我们在链接数据库是只需要链接一次的,也就是只需要实例化一次对象就可以了,但是实际情况下我们运行一次就会new一次对象,使用单例模式可以避免大量的new操作,因为每一次实例化都会消耗系统和内存的资源

特点:

只会创建一个对象

必须自行创建这个实例

必须给其他对象提供这个实例

<?php

class Single {
    private $name;//声明一个私有的实例变量
    private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
    }
    static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
    static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
        $kaka = self::$instance;
        if(!$kaka){
            self::$instance = new self();
        }
        return self::$instance;
    }
    public function setname($n){ $this->name = $n; }
    public function getname(){ return $this->name; }
}
$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
$c = $oa->getname();
$d =  $ob->getname();

下来我们使用debug先看一下$oa这个对象运行步骤

运行步骤:

之$oa = Single::getinstance();

1.会直接走getinstance这个方法

2.$instance这个值是用来存储实例的对象的,第一次进这个实例是没有对象的,所有会直接创建这个实例

3.返回实例出来的对象

运行步骤:

之$ob = Single::getinstance();

1.同样也会走getinstance()这个方法

2.但是这个时候$kaka已经有存在的实例了,所以就不会在新创建,直接return

从以上俩个方法就可以很明了的看出来,这段代码只会实例化对象一次,这也就是咱们的单例模式

最后俩个方法getname()肯定都是good morning了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔咔-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值