Php物件導向 單例模式

2022-09-24 02:54:07 字數 1263 閱讀 5251

php物件導向 – 單例模式

保證類只有乙個例項

1. 如何可以解決乙個類可以被無限地例項化?

new,就能例項化一次,怎麼去限制,使用者不能無限次地new?

將構造方法私有化。所有外部的new都操作失敗

class mysqldb

private function __construct()

2. 一旦構造方法私有化,意味著類不能再類外例項化。但可以在類內例項化。

增加乙個公共的靜態方法,通過類來呼叫該方法,在方法內可以執行new操作。

class mysqldb

private function __construct()

public static function getinstance()

return new mysqldb;

$o = mysqldb::getinstance();

此時,使用者需要該類的物件,方法內的**就會執行,因此,我們可以通過完善方法內的邏輯,限制使用者得到物件的操作。

3. 在上面的方法內,使用這樣的邏輯:每次執行時做判斷,判斷該類是否已經例項化物件,如果例項化了,則直接返回這個例項化好的物件。如果沒有例項化,則例項化乙個新的,然後返回。

如何判斷?

在這個物件被例項化出來時,儲存起來。

例子:class mysqldb

private static $instance;

private function __construct()

public static function getinstance()

if(!self::$instance instanceof self)

self::$instance= new self;

return self::$instance;

4. 轉殖也可以得到新物件,因此需要限制轉殖。

私有化 __clone()方法

class mysqldb

private static $instance;

private function __construct()

private function __clone()

public static function getinstance()

if(!self::$instance instanceof self)

self::$instance= new self;

return self::$instance;

PHP物件導向 單例模式

單例模式 singleton pattern 單例模式 singleton pattern 是最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式...

物件導向 單例模式

設計模式 解決某一類問題行之有效的解決辦法 思想 單例 singleton 設計模式 學習設計模式必須先弄清楚它是解決什麼問題的。單例是解決什麼問題的呢?可以保證乙個類的物件唯一性。場景 比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中。而且多個程...

PHP 物件導向 設計模式之單例模式

單例模式要解決的問題就是 如何讓這個類只有乙個例項 我們的web應用中,大量使用了資料庫連線,如果反覆建立與資料 庫的連線必然消耗更多的系統資源。我們如何解決這個問題,建立唯一的資料庫連線是必要的方式。我們又如何知道與這個資料庫的連線是否已經建立?還是需要現在 建立?單例模式可以解決這個問題。先假設...