PHP單例設計模式

2021-10-14 06:15:51 字數 1586 閱讀 2247

單例設計模式:

/* 單例設計模式:單例就是乙個僅有乙個例項(只能得到乙個物件)

問題:1:每乙個new都會得到乙個新物件,每一次得到新物件,構造方法就會被執行一次

解決方法:不能讓類在外邊隨便new,把構造方法進行私有化

2:在類外不能new了,那麼這個類就不能被例項化,構造方法不執行了

解決方法:在類內定義乙個方法,在這個方法裡去new這個類

3:由於在類外沒有物件,所以沒有辦法訪問到into方法

解決方法:讓into方法變成靜態的,然後通過範圍運算子使用類裡邊的 into方法

4:在類外不能new了,但是可以在類外使用範圍運算子多次new(在類外多次訪問into方法)

解決方法:在類裡設定乙個成員屬性,用於儲存在類內得到的物件

5:由於沒有物件的產生,所以$this無法使用

解決方法:把成員屬性變成靜態的,然後在靜態的方法中使用範圍運算子訪問靜態的成員屬性

*/class

model

static

public

function

into

($tabname

)return model:

:$obj

;//你們都承認了,它是物件

}public

function

select()

";echo

$sql;}

}/*$user=new model();

$type=new model;

$goods=new model;

*///model::into('goods');

$user

=model:

:into

('user');

//物件

//訪問類裡邊的方法 物件->方法名

$user

->

select()

;$type

=model:

:into

('type');

$type

->

select()

;1.newtest()

;//通過new例項化物件

2. 通過clone複製物件

3. 通過序列化反序列化得到物件例項

4. 通過類的反射例項化物件

如何阻止這種例項化實現理想的單例模式

1.newtest()

;//通過new例項化物件: 通過更改構造方法為private 阻止使用方直接new 物件

2. 通過clone複製物件 : 通過定義private

__clone

()阻止複製操作

3. 通過序列化反序列化得到物件例項 :通過定義__wakeup

()阻止物件的反序列化。

4. 通過類的反射例項化物件:暫時還沒有相應的方法去阻止使用此方法實現物件多例

例化物件:暫時還沒有相應的方法去阻止使用此方法實現物件多例

單例模式有三個特點:

1、乙個類只有乙個例項

2、它必須自行建立這個例項

3、必須自行向整個系統提供這個例項

PHP 單例模式設計

單例模式 singleton 通過 實現單例的設計思路 乙個類最多只能產生乙個物件的設計思想。單例模式設計原則 三私一公 私有化構造方法 私有化轉殖方法 私有化靜態屬性 公有靜態方法 1.單例 單例模式 單例 乙個類最多只能有乙個物件 單例模式 singleton 通過 實現單例的設計思路 乙個類最...

PHP設計模式 單例

單例模式 通過提供自身共享例項的訪問,單例設計模式用於限制特定物件只能被建立一次。使用場景 例如資料庫例項,一般都會走單例模式。單例模式可以減少類的例項化 initphp框架,先檢測類有沒被例項化,例項化了就使用已經存放在靜態變數中的物件例項,沒有則例項化並將物件儲存起來。php 框架核心載入 框架...

php設計模式 單例模式

靜態方法所訪問的屬性也必須是static的。靜態方法呼叫靜態變數使用方式是self 靜態變數名 靜態方法呼叫靜態方法使用方式是self 靜態方法名 類的例項可以訪問靜態方法,但不可以訪問靜態變數 package name subpackage name category name author ad...