php設計模式 單例模式

2022-08-03 12:00:14 字數 1685 閱讀 9497

1) 什麼是單例模式

2)為什麼使用單例模式

3)單例模式的使用方法

單例模式介紹與說明:

什麼是:只會生產乙個例項物件的類,就叫做單例模式。單例模式生成乙個物件後, 該物件可以被其它眾多物件所使用。

為什麼:在開發過程中,往往有其他同事在不知情的情況下很容易就輕而易舉的 new 乙個物件出來,如果這樣的情況很多,會很大程度上引起記憶體資源浪費。

舉栗子:像資料庫連線的呼叫以及常用的基類都可以使用單例模式來實現。

如何做:實現乙個例項類將它存在乙個靜態私有變數中,在處理這個類不會被轉殖、不會被反序列化就可以真正意義上實現單例模式。

**案例:普通類的呼叫

<?php/**

* 普通類的呼叫

* class login */

class

login

public

function

init()

}$obj = new login(111);

$obj1 = clone

$obj

;$obj2 = unserialize(serialize($obj

));var_dump($obj

);var_dump($obj1

);var_dump($obj2);#

由輸出可以見每乙個物件都不一樣

//object(login)#1 (0)

//object(login)#2 (0)

//object(login)#3 (0)

單例模式的使用

<?php

class

baselogin

/*** 單例類的出口

* @return mixed

*/public

static

function

getinstance()

return self::$instance

; }

public

function

index()

/*** 以防被轉殖

*/private

function

__clone()

/*** 防止返序列化

*/private

function

__wakeup()

}#這裡例項化物件會報錯,不給例項了,所以只能走單一入口

#$obj = new baselogin();

#var_dump($obj);

#fatal error: uncaught error: call to private baselogin::__construct()

$result = baselogin::getinstance("你好")->index();

var_dump($result); #

你好$login1 = baselogin::getinstance("111");

$login2 = baselogin::getinstance("222");

var_dump($login1

);var_dump($login2);#

由下可見是同乙個類

//你好null

//object(baselogin)#1 (0)

//object(baselogin)#1 (0)

php設計模式 單例模式

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

PHP設計模式 單例模式

單例模式就是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。通常我們可以讓乙個全域性變數使得乙個物件被訪問,但是不能防止你例項化多個變數,乙個最好的辦法就是讓類自身負責儲存它的唯一例項,這個類可以保證沒有其它例項可被建立,並且他可以提供乙個訪問該例項的方法。下面提供兩種單例模式的例子 例1 ...

PHP設計模式 單例模式

單例模式的必要性 1.目的 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。2.要點 1 某乙個類只能有乙個例項 2 必須自行建立這個例項 3 必須自行向整個系統提供這個例項。3.作用 避免重複例項化,節省系統資源。例如在資料庫操作方面,會大量存在資料庫連線操作,單例類可以避免多次...