PHP筆記:接口,自動加載機制,序列化與反序列化,對象的克隆_第1頁
PHP筆記:接口,自動加載機制,序列化與反序列化,對象的克隆_第2頁
PHP筆記:接口,自動加載機制,序列化與反序列化,對象的克隆_第3頁
PHP筆記:接口,自動加載機制,序列化與反序列化,對象的克隆_第4頁
PHP筆記:接口,自動加載機制,序列化與反序列化,對象的克隆_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

PHP接口結(jié)構(gòu),interface接口:指的是對象的公共方法也有一種接口技術,定義一個接口結(jié)構(gòu),用于限制一個類(對象)應該具備的公共方法(接口方法)!語法:使用關鍵字interface聲明一個接口結(jié)構(gòu)!聲明:interfacei_Goods{ publicfunctionsayName(); publicfunctionsayPrice();}注意:接口內(nèi)只能包含公共的抽象方法(不完整的方法)!使用:使一個類來實現(xiàn)接口內(nèi)定義的所有接口方法(公共方法)實現(xiàn):使用關鍵字implements來完成interfacei_Goods{ publicfunctionsayName(); publicfunctionsayPrice();}abstractclassGoddsimplementsi_Goods{ }classShopimplementsi_Goods{ publicfunctionsayName(){ } publicfunctionsayPrice(){ }}明顯,實現(xiàn)接口結(jié)構(gòu)的類,就包含了接口中定義的抽象方法,兩個選擇:1:定義成抽象類2:實現(xiàn)接口方法類似于抽象類,比較與接口的區(qū)別:1:抽象類與普通類之間是繼承關系

普通類繼承抽象類,第一,可以得到抽象類中的已有的常規(guī)成員,第二,才需要實現(xiàn)抽象方法(也不一定是public的)2:接口與普通類之間是實現(xiàn)關系

普通類實現(xiàn)了接口,只能將其沒有實現(xiàn)的公共方法實現(xiàn)3:接口只用于定義公共的方法,而抽象類,什么都可以有典型的使用:多實現(xiàn)一個類,可以同時實現(xiàn)多個接口interfacei_a{ publicfunctionsayA();}interfacei_b{ publicfunctionsayB();}classAimplementsi_a,i_b{ }接口可以定義常量:interfacei_a{ constPAI=3.14; publicfunctionsayA();}interfacei_b{ publicfunctionsayB();}classAimplementsi_a,i_b{ publicfunctionsayA(){ } publicfunctionsayB(){ }}echoA::PAI;辨別?1:接口是不是類?

NO

可以用class_exists();判斷是不是類2:PHP是單繼承,怎么實現(xiàn)多繼承?

“可以通過接口的多實現(xiàn)來模擬”此說法是錯誤的

答案:不能實現(xiàn)多繼承類文件的載入-自動加載機制項目中如何管理大量的類的定義?典型的,每個類,獨立的創(chuàng)建一個文件,用于保存定義該類的源代碼!使用時,將該文件載入即可!此時,類文件的命名為:類名.class.php此時,面臨一個類文件很多,某個功能需要使用其中部分類:如何合理方便載入?老辦法:將載入類的代碼,放在一起問題是:會有類的額外加載現(xiàn)在的載入類文件的方式是:按需加載在需要某個類時,如果該類沒有被加載,則加載定義該類的類文件判斷當前類是否已經(jīng)加載?該類在哪個文件中?什么時機執(zhí)行上面的操作?(自動加載機制來完成)此時可以使用PHP的類文件,自動加載機制完成!自動加載機制當需要一個類,但是并沒有找到該類的定義,此時,PHP核心(ZendEngine)會自動嘗試調(diào)用一個叫:__autoload()的函數(shù)。與此同時,會將當前所需要的類名作為參數(shù),傳遞到__autoload()這個函數(shù)中默認是沒有這個函數(shù)的,需要用戶自己定義!因此,用戶腳本需要完成定義該函數(shù)該函數(shù)應該有個形參,用于得到當前所需要的類名示例:function__autoload($class_name){ require'./'.$class_name.'class.php';}newBook;此時,輸出的結(jié)果為:此時,我們只要完成該函數(shù),利用得到的類名,將類名所對應的文件載入即可序列化,反序列化(串行化,反串行化)場景:數(shù)據(jù)的持久性保存!例如:將數(shù)據(jù)保存在文件內(nèi)向文件寫入數(shù)據(jù):寫入的長度=file_put_contents("文件","數(shù)據(jù)");從文件讀取數(shù)據(jù):數(shù)據(jù)=file_get_contents("文件");寫入:$data='ginvip';echo'寫入前的數(shù)據(jù):<br/>';var_dump($data);$len=file_put_contents('./data.txt',$data);echo'<br/>';var_dump($len);讀?。?data=file_get_contents('./data.txt');echo'讀取到的數(shù)據(jù):<br/>';var_dump($data);在數(shù)據(jù)保存時,面臨一個問題:數(shù)據(jù)格式問題:PHP的數(shù)據(jù)有八種類型之多,文件只能保存字節(jié)數(shù)據(jù)(字符串)一旦數(shù)據(jù)類型不是字符串類型!就會導致數(shù)據(jù)不能原樣保存,不能取得原始數(shù)據(jù)應該如何解決?任何形式的數(shù)據(jù),都可以存儲到文件中,并且,在取出來時,原樣得到數(shù)據(jù)在保存與讀取時,對數(shù)據(jù)進行轉(zhuǎn)換與反轉(zhuǎn)換!序列化,serlialize序列化:原始數(shù)據(jù)轉(zhuǎn)成能夠記錄原始數(shù)據(jù)信息的字符串$data='ginvip';echo'寫入前的數(shù)據(jù):<br/>';var_dump($data);$ser_data=serialize($data);echo'<br/>序列化后的數(shù)據(jù):';var_dump($ser_data);$len=file_put_contents('./data.txt',$ser_data);echo'<br/>';var_dump($len);輸出結(jié)果為:反序列化,unserialize反序列化:通過序列化的字符串結(jié)果,將原始數(shù)據(jù)還原$data=file_get_contents('./data.txt');echo'讀取到的數(shù)據(jù):<br/>';var_dump($data);echo'<br/>';echo'轉(zhuǎn)換后的數(shù)據(jù)<br/>';var_dump(unserialize($data));輸出結(jié)果為:對象的序列化與反序列化4:在反序列化時,可以自動再次執(zhí)行某些代碼,從而完成某些資源的初始化通過對象方法:__wakeup();函數(shù)會在對象被反序列過程中自動調(diào)用,所負責的功能,執(zhí)行反序列化(醒來之后的初始化工作)總結(jié):__construct__destruct__sleep__wakeupPHP自動調(diào)用,用戶腳本只需要定義。在特定的功能調(diào)用特定的方法以上四個方法總稱為魔術方法對象的拷貝與克隆classBook{ public$author;}$b1=newBook;$b1->author='BruceLee';$b2=$b1;var_dump($b2);echo'<hr/>';$b1->author='JetLee';var_dump($b1->author);echo'<br/>';var_dump($b2->author);輸出結(jié)果依次為:對象之間的賦值,只有引用傳遞,沒有值傳遞保存對象的變量內(nèi),保存的不是對象本身,而是對象的標識導致的結(jié)果是,不能通過賦值的方式,使用舊對象,得到新對象對象的克隆克隆,使用一個已有對象,得到一個屬性一致的新對象使用關鍵字clone來實現(xiàn)classBook{ public$author;}$b1=newBook;$b1->author='BruceLee';$b2=clone$b1;var_dump($b2);echo'<br/>';$b1->author='JetLee';var_dump($b1->author);echo'<br/>';var_dump($b2->author);輸出結(jié)果為:典型的在克隆時,一定會出現(xiàn)某些屬性是用于區(qū)分是否是克隆出來的意味著,在克隆出來新對象時,要為新對象增加一些額外的標識,才可以區(qū)分出來此時,在執(zhí)行clone時,會自動調(diào)用新對象的魔術方法__clone去完成克隆對象的初始化classBook{ public$is_clone=false; public$author; publicfunction__clone(){ $this->is_clone=true; }}$b1=ne

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論