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了