《PHP初體驗(一)》要點:
本文介紹了PHP初體驗(一),希望對您有用。如果有疑問,可以聯(lián)系我們。
提筆寫初體驗總不知道從何說起,直接聊PHP中的函數(shù)、PHP網(wǎng)絡技術、數(shù)據(jù)庫操作、PHP模板等感覺又不是初體驗.最后還是決定從PHP的面向對象、PHP的魔術辦法、PHP的反射、PHP中的異常和錯誤這4個方面簡單介紹一下.
PHP面向工具的“形”與“本”
這里我們就不給面向對象下定義了,不外我們還是要說一下類和對象的.類是對象的抽象組織,對象是類的具體存在.接下來我們就拿PHP為例,來探討一下對象的“形”與“本”的問題.
在PHP中,每個類的定義都是以關鍵字class開頭,后面是類名和一對花括號,括號中包含類成員和辦法的定義.如下是一個簡單類的定義:
當把類對象序列化輸出時,可以看出類對象在存儲時類似于數(shù)組的形式.那么類對象與數(shù)組從本色上又有什么區(qū)別與聯(lián)系呢?接下來從對象“本”來分析一下PHP對對象的底層實現(xiàn).如下是PHP源碼中對變量的定義:
通過上面的代碼我們也對PHP如何存儲對象有了初步的認識,那對象與數(shù)組又是什么關系呢?通過PHP的源碼可得,zvalue_object結構中有一個HashTable的類型,它便是存儲數(shù)組的.PHP對象的結構體中不僅有HashTable(用于存儲類對象特有的屬性),而且還有對象所屬類的入口等,如下是PHP對象的組成:
其中PHP源碼中zend_class_entry結構體中存儲的就是類的指針,該結構體中包含類常量、靜態(tài)屬性、標準辦法、魔術辦法、自定義辦法等.而屬性數(shù)組存儲的是類對象的屬性.接下來我們還是以如上的Person類為例,談一談對象與數(shù)組:
PHP中的魔術辦法
可能細心的你在對象組成的那張圖中看到了魔術辦法,但是上一節(jié)中并沒有對zend_class_entry中的內容做任何介紹.那么什么又是魔術辦法呢?魔術辦法就是以兩個下劃線“__”開頭、具有一些特殊作用的辦法.其實如上的Person類中,我們不經(jīng)意間就使用了魔術辦法__construct(),這個魔術辦法就是構造辦法.用于在創(chuàng)建類對象時對屬性進行賦值.接下來我們將介紹幾個常見的魔術辦法讓大家對魔術辦法有個初步了解.
__sleep():該魔術辦法是在執(zhí)行serialize()辦法完成前被調用,該辦法可以用來關閉對象可能具有的任何數(shù)據(jù)庫連接、加密需要序列化對象屬性的值、指定僅序列化對象的某些屬性等等.
__wakeup():該魔術辦法是在執(zhí)行unserialize()辦法完成前被調用,該辦法可以用來建立對象可能的數(shù)據(jù)庫連接、解密序列化對象屬性的值等等.
3.__construct():類的構造辦法,類對象在創(chuàng)建時會首先調用該辦法,因此該辦法中可以做一些類對象創(chuàng)建前的初始化工作.
4.__destruct():類的析構辦法,當類對象在銷毀時會調用該辦法.
5.__get()和__set()方法,這兩個方法主要是實現(xiàn)了可以在類的外部通過對象直接拜訪類的私有屬性,還可以增加類中沒有定義的屬性,如給$person對象增加marriage屬性,只需$person->marriage="married"即可.
6.__call()和__callStatic():當類對象調用的辦法不存在而且類中定義了__call()辦法時,則會自動調用類的__call(),當類調用靜態(tài)辦法不存在而且類中定義了辦法__callStatic()時,則會自動調用__callStatic()辦法.
7.__toString()辦法,該辦法主要用于格式化打印一個對象,該辦法的設計原型來源于Java.只有類中實現(xiàn)了__toString()辦法才可以通過echo直接打印該對象.
關于PHP的魔術辦法我們就簡單介紹到這里,由上我們可以看出從構造辦法上,PHP相比于還稍有欠缺,但PHP中有__set()和__get(),使得動態(tài)增加對象的屬性字段變得更加方便,而對于Java來說要實現(xiàn)類似的效果,就不得不借助反射API或直接修改編譯后字節(jié)碼的方式實現(xiàn)了.Java中有反射機制,那么PHP中呢?接下來讓我們來看一看PHP中的反射實現(xiàn).
更多干貨請存眷:
優(yōu)待業(yè)500萬陽光待業(yè)基金:
http://www.ujiuye.com/zt/jyfc/?wt.bd=fq37300
優(yōu)待業(yè)官網(wǎng):http://www.ujiuye.com/?wt.bd=fq37300
維易PHP培訓學院每天發(fā)布《PHP初體驗(一)》等實戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/7168.html