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了