首頁(yè)技術(shù)文章正文

PHP培訓(xùn)之常用的PHP魔術(shù)方法

更新時(shí)間:2017-06-29 來(lái)源:黑馬程序員PHP培訓(xùn)學(xué)院 瀏覽量:

什么是魔術(shù)方法?是不是感覺(jué)很神奇的名字,下面我們舉例說(shuō)明!

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



本文版權(quán)歸黑馬程序員PHP培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處,謝謝!
作者:黑馬程序員PHP培訓(xùn)學(xué)院
首發(fā):http://php.itheima.com/
分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!