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

author:咔咔php

wechat:fangkangfk数据库

 

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

文件:就是下面的这份代码,直接拿过去就能够用this

测试:使用debugdebug

为何使用:就拿连接数据库来讲,咱们在连接数据库是只须要连接一次的,也就是只须要实例化一次对象就能够了,可是实际状况下咱们运行一次就会new一次对象,使用单例模式能够避免大量的new操做,由于每一次实例化都会消耗系统和内存的资源调试

特色:code

只会建立一个对象对象

必须自行建立这个实例内存

必须给其余对象提供这个实例资源

 

<?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了

相关文章
相关标签/搜索