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了