什么是魔術(shù)方法?我們舉例說明!
默認(rèn)不存在,但是如果用戶定義了相關(guān)的方法,則在相應(yīng)的情況發(fā)生時 會自動執(zhí)行的方法,稱之為魔術(shù)方法。通常 魔術(shù)方法都是以 __開頭。
舉例說明
1)__autoload() :當(dāng)程序?qū)嵗硞€類,而該類沒有在當(dāng)前文件中被引入。此時會觸發(fā)執(zhí)行__autoload()。程序希望通過該方法,自動引入這個類文件。該方法有一個 參數(shù),即就是那個忘記引入的類的名稱。__autoload()方法的工作原理是什么?當(dāng)程序執(zhí)行到實(shí)例化某個類的時候,如果在實(shí)例化前沒有引入這個類文 件,那么就自動執(zhí)行__autoload()函數(shù)。這個函數(shù)會根據(jù)實(shí)例化的類的名稱來查找這個類文件的路徑,當(dāng)判斷這個類文件路徑下確實(shí)存在這個類文件 后,就執(zhí)行include或者require來載入該類,然后程序繼續(xù)執(zhí)行,如果這個路徑下不存在該文件時就提示錯誤。使用自動載入的魔術(shù)函數(shù)可以不必要 寫很多個include或者require函數(shù)。
2)__construct() : 這個是魔術(shù)構(gòu)造方法。構(gòu)造方法是實(shí)例化對象的時候自動執(zhí)行的方法,作用就是初始化對象。該方法可以沒有參數(shù),也可以有多個參數(shù)。如果有參數(shù),那么new這 個對象的時候要記得寫上相應(yīng)的參數(shù)。在php5以前,沒有魔術(shù)構(gòu)造方法,普通構(gòu)造方法是一個跟類名同名的方法來實(shí)現(xiàn)構(gòu)造的。如果一個類中既寫了魔術(shù)構(gòu)造方 法,又定義了普通構(gòu)造方法。那么php5以上版本中,魔術(shù)方法起作用,普通構(gòu)造方法不起作用。反之,在php5以前版本中,不認(rèn)識魔術(shù)構(gòu)造方法,只是把該 方法當(dāng)做普通的方法。
3)__destruct() :這個是魔術(shù)析構(gòu)方法。析構(gòu)方法的作用和構(gòu)造方法正好相反,是對象被銷毀時被自動調(diào)用的,作用是釋放內(nèi)存。析構(gòu)方法沒有參數(shù)。
4)__call() :當(dāng)程序調(diào)用一個不存在或不可見的成員方法時,自動觸發(fā)執(zhí)行__call()。它有兩個參數(shù),分別是未訪問到的方法名稱和方法的參數(shù)。而第二個參數(shù)是數(shù)組類型。
5)__get() :當(dāng)程序調(diào)用一個未定義或不可見的成員屬性時,自動觸發(fā)執(zhí)行__get()。它有一個參數(shù),表示要調(diào)用的屬性的名稱。
6)__set():當(dāng)程序試圖寫入一個不存在或不可見的成員屬性時,PHP就會自動執(zhí)行__set()。它包含兩個參數(shù),分別表示屬性名稱和屬性值。
7)__tostring() :當(dāng)程序使用echo或print輸出對象時,會自動調(diào)用該方法。目的是希望通過該方法將對象轉(zhuǎn)化為字符串,再輸出。__tostring() 無參數(shù),但是該方法必須有返回值。
8)__clone() :當(dāng)程序clone一個對象的時候,能觸發(fā)__clone()方法,程序希望通過這個魔術(shù)方法實(shí)現(xiàn):不僅僅單純地克隆對象,還需要克隆出來的對象擁有原來對象的所有屬性和方法。