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了