在實際開發中,常會看到像下面一樣的程式碼

function getXXX(){
    $db = new DB();
    $db -> query(...);
}
function getYYY(){
    $db = new DB();
    $db -> query(...);
}

在這種狀況下,DB的物件會被重覆建立,造成系統負擔

Singleton pattern就是要解決這樣子的問題,在建立同時先判斷物件是不是已經先存在

class DB {
    private static $_instance = null;
    public static function getInstance() {
        if( self::$_instance === null ){
            self::$_instance = new self();
        }
        return self::$_instance;
    }
}
//db1 db2 皆為同一個instance
$db1 = DB::getInstance();
$db2 = DB::getInstance();

當然克服這種狀況也可以利用global來解決,不過以OOP的角度來說,還是建議使用Singleton。

Categories: PHP