《PHP初體驗(二)》要點:
本文介紹了PHP初體驗(二),希望對您有用。如果有疑問,可以聯系我們。
這是《PHP初體驗》內容第后半部門,前半部門請查我們的頭條號.
PHP中的反射機制
反射,直觀的理解就是根據到達地找到出發地和來源.比如給出一個對象就可以找到對象所屬的類、擁有哪些辦法.反射可以在PHP運行狀態中,擴展分析PHP程序,導出或提取出關于類、辦法、屬性、參數等的詳細信息,這種動態獲取信息以及動態調用對象辦法的功能稱為反射API.
如上代碼中介紹的是通過對象獲取類的辦法和屬性字段,而反射不僅僅可以用于類和對象,還可以用于函數、擴展模塊、異常等.既然反射可以探知類的內部結構,那么就可以利用反射機制實現插件的功能,也可以利用反射機制實現動態代理.接下來舉個簡單的例子看看如何通過反射機制實現動態代理.
如上的代碼中真正實現sayHello()動作的是Person類中的sayHello()辦法,而Dynamicproxy僅是一個代理類,其中并沒有定義sayHello()辦法,而是通過__call()辦法動態調用類Person的sayHello()辦法.在DynamicProxy類中可以做sayHello()辦法的前后攔截,并且可以動態的改變類中的辦法和屬性.很多時候,善用反射可以保持代碼的優雅和簡潔,但反射也會破壞類的封裝性,因為反射可以使本不應該暴露的辦法或屬性被強制暴露了出來.
PHP中的異常和差錯
在語言級別通常有許多錯誤處理模式,但這些模式往往建立在約定俗稱的基礎上,也就是錯誤都是可預知的.不同的語言對異常和錯誤的定義也是不一樣的,在PHP中,遇到任何自身錯誤都會觸發一個錯誤,而不是拋出異常.也就是說PHP一旦遇到非正常代碼,通常都會觸發錯誤,而不是拋出異常.因此如果想使用異常處理不可預料的問題,是辦不到的.好比,想在文件不存在或數據庫無法建立連接時觸發異常,是不可行的.PHP會把這些作為錯誤拋出,而不是作為異常捕獲.還是回到PHP的錯誤處理上,PHP中的錯誤級別大致分為以下幾類:
最高級其余錯誤是語法解析錯誤 prase error.該錯誤屬于語法檢查階段錯誤,這會導致PHP代碼無法通過語法檢查.
次之的差錯是fetal error.該類差錯會導致PHP流程終止,其后的代碼無法繼續執行.
warning是警告級其余錯誤,在語法中出現很不恰當的情況才會報此錯誤,如參數不匹配、除數為0等.這種錯誤會導致不可預期的結果.
notice是通知級其余錯誤,這種錯誤是在如變量使用前未定義、數組索引是字符時沒有加引號等情況.
最低級別的錯誤是deprecated的錯誤,表示不保舉,不建議.如在PHP5中使用ereg系列的正則匹配函數就會報此類錯誤,該錯誤是由于使用了不保舉、過時的函數或語法造成的,不影響PHP正常流程.
接下來我們看一看針對上邊介紹的各個級其余錯誤PHP是如何處理的.PHP中提供了set_error_handler()函數來處理錯誤,當然該函數也不是可以托管所有種類的錯誤,如E_ERROR、E_PARSE、E_CORE_ERROR等錯誤,這些錯誤會以原始的方式顯示.當然也可以通過restore_error_handler()取消接管:
如上這種“曲折迂回”的處理方式也存在問題:必須依靠程序員本身來掌控對異常的處理,對于異常高發區、敏感區,如果處理不好就會出現業務數據不一致的問題,但是優點就是可以獲得程序運行的上下文信息,以進行針對性補救.
對于代碼中存在的異常,必要認為的進行拋出,接下來我們通過自定義一個異常類來處理拋出的異常,
初體驗就為年夜家介紹到這里吧,以后有機會在深入的去了解PHP函數、PHP與網絡、PHP與數據庫等等的內容吧.
IT行業最新資訊:
優待業500萬陽光待業基金:
http://www.ujiuye.com/zt/jyfc/?wt.bd=fq37300
優待業官網:http://www.ujiuye.com/?wt.bd=fq37300
維易PHP培訓學院每天發布《PHP初體驗(二)》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6909.html