author:咔咔

做什么:这是一份单例模式的代码,我们需要对他进行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.返回实例出来的对象

【PHP-设计模式】单例模式_数据库

运行步骤:

之$ob = Single::getinstance();

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

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

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

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

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