標籤:它的 字元 string 單例模式 png clone load call class
一、在oop中有一個模式叫做單例模式,那什麼是單例模式呢?
PHP單例模式,就是一個對象只被產生一次,但該對象可以被其它眾多個物件使用。
在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個執行個體而且該執行個體易於外界訪問,從而方便對執行個體個數的控制並節約系統資源。
單例模式使用最多的情境,是資料庫連接操作。我們知道,產生一個對象的操作是用new函數來實現,但是new對象都會消耗記憶體,而且有時候對同一個對象,在不同檔案中可能會產生多 次,這就造成了系統資源的浪費。然而使用單例模式,則可以很好的避免這種情況。
單例代碼如下:
使用單例模式有下面幾個要求:
1.建構函式需要標記為private(存取控制:防止外部代碼使用new操作符建立對象),單例類不能在其他類中執行個體化,只能被其自身執行個體化;
2.擁有一個儲存類的執行個體的靜態成員變數;
3.擁有一個訪問這個執行個體的公用的靜態方法(常用getInstance()方法進行執行個體化單例類,通過instanceof操作符可以檢測到類是否已經被執行個體化);
4.如果嚴謹的話,還需要建立__clone()方法防止對象被複製(複製)。(我上面沒建立)
使用單例模式好處,總結:
1、php的應用主要在於資料庫應用, 所以一個應用中會存在大量的資料庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。
2、如果系統中需要有一個類來全域控制某些配置資訊, 那麼使用單例模式可以很方便的實現. 這個可以參看ZF的FrontController部分。
3、在一次頁面請求中, 便於進行調試。
二、在PHPOOP中還有一種方法叫魔術方1、在 PHP 裡,將所有以 __(兩個底線)開頭的類方法保留為魔術方法,所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為首碼。
魔術方法的引入是對物件導向編程思想的進一步實現,重載就是通過魔術方法來實現的。
2、PHP 魔術方法主要有: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()
最常見的是__construct(), __destruct(),__get(), __set()等:
__construct和__destruct是類的建構函式和解構函式。
3、魔法方法總結
1、__construct():建構函式,new一個新對象時自動調用
2、__destruct():解構函式,當一個對象被銷毀前自動調用
3、__get(): 訪問類中私人屬性時,自動調用,傳遞讀取的屬性名稱,返回$this->屬性名稱
4、__isset():使用isset函數檢測對象私人屬性時,自動調用,傳遞檢測的屬性名稱,返回isset($this->屬性名稱)
5、__set():各類的私人屬性賦值時,自動調用,傳遞需要設定的屬性名稱和屬性值
6、__unset():使用unset()刪除對象私人屬性時 自動調用,傳遞刪除的屬性名稱,方法中執行unset($this->屬性名稱)
7、__toString():使用echo列印對象時,自動調用。返回想要在列印對象時,顯示的內容;返回必須是字串;
8、__call():調用一個類中未定義或未公開的方法時,自動調用。傳遞被調用的函數名,和參數列表數組;
9、__clone():當使用clone關鍵字,複製一個對象時,自動調用。作用是為新複製的對象進行初始化賦值;
10、__sleep():對象序列化時,自動調用。返回一個數組,數組中的值就是可以序列化的屬性;
11、__wakeup():對象還原序列化時,自動調用。為還原序列化新產生的對象,進行初始化賦值;
12、__autoload():需要在類外部聲明函數。當執行個體化一個未聲明的類時,自動調用。傳遞執行個體化的類名,可以使用類名自動載入對應的類檔案。
PHP中的OOP