【PHP-設計模式】單例模式

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了

相關文章
相關標籤/搜索