php單例模式

1.什麼是單例模式

若是應用程序每次包含且僅包含一個對象,那麼這個對象就是一個單例(Singleton)php

2.爲何使用單例模式.

某些應用程序資源是獨佔的,由於有且只有一個此類型的資源。例如,經過數據庫句柄到數據庫的鏈接是獨佔的。您但願在應用程序中共享數據庫句柄,由於在保持鏈接打開或關閉時,它是一種開銷,在獲取單個頁面的過程當中更是如此.mysql

3.實例演示.

<?php
require_once("DB.php");

class DatabaseConnection
{
    public static function get()
    {
        static $db = null;
        if ( $db == null )
            $db = new DatabaseConnection();
        return $db;
    }

private $_handle = null;

private function __construct()
{
    $dsn = 'mysql://root:906424@localhost/gbook';
    $this->_handle =& DB::Connect( $dsn, array() );
}

public function handle()
{
    return $this->_handle;
}
}

print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );

此代碼顯示名爲 DatabaseConnection 的單個類。您不能建立自已的 DatabaseConnection,由於構造函數是專用的。但使用靜態 get 方法,您能夠得到且僅得到一個 DatabaseConnection 對象。此代碼的 UML 如圖 3 所示。
圖 3. 數據庫鏈接單元素sql

數據庫鏈接單元素
在兩次調用間,handle 方法返回的數據庫句柄是相同的,這就是最好的證實。您能夠在命令行中運行代碼來觀察這一點。數據庫

% php singleton.php 
Handle = Object id #3
Handle = Object id #3
%

返回的兩個句柄是同一對象。若是您在整個應用程序中使用數據庫鏈接單元素,那麼就能夠在任何地方重用同一句柄。
您能夠使用全局變量存儲數據庫句柄,可是,該方法僅適用於較小的應用程序。在較大的應用程序中,應避免使用全局變量,並使用對象和方法訪問資源。(轉)函數

相關文章
相關標籤/搜索