最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
什么是PHP中錯誤與異常

今天就跟大家聊聊有關(guān)什么是PHP中錯誤與異常,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)2013年至今,先為延吉等服務(wù)建站,延吉等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為延吉企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

PHP錯誤級別

Parse error > Fatal Error > Waning > Notice > Deprecated

  • Deprecated 最低級別的錯誤(不推薦,不建議)
    使用一些過期函數(shù)的時候會出現(xiàn),程序繼續(xù)執(zhí)行

  • Notice 通知級別的錯誤
    使用一些未定義變量、常量或者數(shù)組key沒有加引號的時候會出現(xiàn),程序繼續(xù)執(zhí)行

  • Waning 警告級別的錯誤
    程序出問題了,需要修改代碼!??!程序繼續(xù)執(zhí)行

  • Fatal Error 錯誤級別的錯誤
    程序直接報(bào)錯,需要修改代碼?。?!中斷程序執(zhí)行,可使用register_shutdown_function()函數(shù)在程序終止前觸發(fā)一個函數(shù)

  • Parse error 語法解析錯誤
    語法檢查階段報(bào)錯,需要修改代碼!?。≈袛喑绦驁?zhí)行,除了修改ini文件,將錯誤信息寫到日志中,什么也做不了

  • E_USER_相關(guān)的錯誤
    用戶定義的錯誤,用戶手動拋出錯誤,進(jìn)行自定義錯誤處理

PHP錯誤相關(guān)函數(shù)

  • ini_set('display_errors', 0); //關(guān)閉錯誤輸出(開發(fā)環(huán)境開啟,生產(chǎn)環(huán)境關(guān)閉)

  • error_reporting(E_ALL&~E_NOTICE); //設(shè)置錯誤報(bào)告級別

  • ini_set('error_reporting',0); //設(shè)置錯誤報(bào)告級別

PHP錯誤配置

  • 除了在腳本里設(shè)置,還可以在php.ini配置文件里配置

  • error_reporting = E_ALL&~E_NOTICE; //設(shè)置錯誤報(bào)告級別

  • display_errors = 1; //開發(fā)環(huán)境開啟,生產(chǎn)環(huán)境關(guān)閉

PHP異常

  • PHP的異常是后來新增特性,與JAVA/C#的異常不同,PHP異常需要手動拋出throw new Exception,而不是系統(tǒng)自動拋出

  • PHP錯誤與異常的區(qū)別,他們是2個不同的概念,但有共同的地方:

    如果異常不捕獲處理,程序?qū)K止,并報(bào)出Fatal Error 錯誤,看到這里大家就會覺得異常是不是錯誤的一種,這是一種錯覺,但這樣理解也可以。但異常捕獲后程序可以繼續(xù)執(zhí)行,而真正的Fatal Error錯誤出現(xiàn)后程序就必須終止

  • 異??梢允褂?try{}catch(){} 來捕獲捕獲,捕獲之后后續(xù)代碼可以繼續(xù)執(zhí)行;而錯誤是無法使用 try{}catch(){} 捕獲的

  • 如果拋出了異常,就必須捕獲它,否則程序終止執(zhí)行。

PHP異常與錯誤的拋出

  • 異常拋出:throw new Exception('Some Error Message');

  • 錯誤拋出:trigger_error()

  • trigger_error() 觸發(fā)的錯誤不會被 try-catch 異常捕獲語句捕獲

PHP錯誤處理

  • set_error_handler()

只能處理Deprecated、Notice、Waning這三種級別錯誤,而且處理后,腳本將會繼續(xù)執(zhí)行發(fā)生錯誤的后一行

  • register_shutdown_function()

這個方法是腳本結(jié)束前的最后一個回調(diào)函數(shù),所以無論是die()/錯誤(異常)/還是腳本正常結(jié)束都會調(diào)用

PHP異常處理

  • set_exception_handler()

設(shè)置默認(rèn)的異常處理程序,有try/catch捕獲的話這個函數(shù)就不會執(zhí)行,反之就會執(zhí)行,而且執(zhí)行的話,腳本將不會繼續(xù)執(zhí)行發(fā)生異常的后一行代碼,程序馬上中止

  • set_exception_handler()注意事項(xiàng)

set_exception_handler(“myException”) 不僅可以接受函數(shù)名,還可以接受 類的方法公開的靜態(tài)方法公開的非靜態(tài)方法 都可以),但需要以 數(shù)組形式傳遞,數(shù)組的第一值為“類名”,第二個參數(shù)為“方法名”,如下代碼所示:

Exception: " , $exception->getMessage();
    }
}
 
set_exception_handler(array('App','myException'));
 
throw new Exception('Uncaught Exception occurred');
?>

PHP異常分類

  • 由于用戶行為導(dǎo)致出現(xiàn)異常

    1、沒有通過驗(yàn)證器

    2、沒查詢到結(jié)果

    3、需要向用戶返回具體信息

    4、不需要記錄日志

    5、可作為異常或者不作為異常,根據(jù)需求和個人情況而定

  • 由于服務(wù)器自身導(dǎo)致出現(xiàn)異常

    1、代碼出錯

    2、調(diào)用第三方接口錯誤

    3、不需要向用戶返回具體信息

    4、需要記錄日志

在程序中PHP異常的自動拋出

  • 由于PHP異常是后面版本新增的特性,設(shè)計(jì)上與JAVA/C#的異常不一樣,JAVA的異常大部分是系統(tǒng)自動拋出,而PHP異常不是系統(tǒng)自動拋出,需要手動拋出,導(dǎo)致PHP異常在程序中的作用減半(異常就是意料之外的事情,根本我們意料不到的,如果用手動拋出,證明已經(jīng)預(yù)先預(yù)料到了,那異常的意義就變味了)

  • 在PHP中異常是手動拋出的,而錯誤是系統(tǒng)自動拋出的(也可手動拋)

  • 我們需要把異常做成系統(tǒng)自動拋出接(例如JAVA)就必須借助錯誤(這三種錯誤Deprecated、NoticeWaning,其他的錯誤不行,因?yàn)闀K止程序運(yùn)行)

 getMessage() . '
'; } echo "end"; ?>

執(zhí)行結(jié)果:

Division by zero
end

PHP7 異常處理的大變化

  • 一段TP5源代碼引出PHP7異常的變化

    什么是PHP中錯誤與異常

    明明set_exception_handler()函數(shù)只可以捕獲Exception類或派生類的對象,為何還需要捕獲的對象做判斷呢?結(jié)果引出了PHP7的變化,請看下面分析

  • 前面已經(jīng)講過異常是需要手動拋出,及時上面所說的方法最多也是把DeprecatedNotice、Waning這3類錯誤封裝成系統(tǒng)自動拋出的異常,但致命錯誤仍然還是無法封裝成系統(tǒng)自動拋出的異常,因?yàn)橹旅e誤(Fatel Error)仍然無法捕獲

  • 在PHP7之前,DeprecatedNotice、Waning這類錯誤是可以捕獲的(使用set_error_handler()函數(shù)),而Fatel Error無法捕獲的

  • 在PHP7之后,出現(xiàn)了一個異常與錯誤通用的接口Throwable,Exception類與Error類都實(shí)現(xiàn)了該接口,導(dǎo)致Error類或Error類的派生類的錯誤對象(大部分Fatel Error,而之前三類錯誤不變)也可以像Exception一樣被捕獲(2種捕獲方法:1、try/catch  2、set_exception_handler())

  • 示例代碼

try{
    go();//該函數(shù)未定義
}catch(Exception $e){
    //捕獲異常
}catch(Error $er){
    //捕獲錯誤
}

看完上述內(nèi)容,你們對什么是PHP中錯誤與異常有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


文章名稱:什么是PHP中錯誤與異常
本文地址:http://fisionsoft.com.cn/article/ipeidi.html