成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 錯(cuò)誤與異常

longmon / 964人閱讀

摘要:但異常捕獲后程序可以繼續(xù)執(zhí)行,而真正的錯(cuò)誤出現(xiàn)后程序就必須終止異常可以使用來(lái)捕獲捕獲,捕獲之后后續(xù)代碼可以繼續(xù)執(zhí)行而錯(cuò)誤是無(wú)法使用捕獲的如果拋出了異常,就必須捕獲它否則程序終止執(zhí)行。

PHP錯(cuò)誤級(jí)別

Parse error > Fatal Error > Waning > Notice > Deprecated

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

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

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

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

Parse error 語(yǔ)法解析錯(cuò)誤
語(yǔ)法檢查階段報(bào)錯(cuò),需要修改代碼?。?!中斷程序執(zhí)行,除了修改ini文件,將錯(cuò)誤信息寫到日志中,什么也做不了

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

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

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

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

ini_set("error_reporting",0); //設(shè)置錯(cuò)誤報(bào)告級(jí)別

PHP錯(cuò)誤配置

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

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

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

PHP異常

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

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

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

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

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

PHP異常與錯(cuò)誤的拋出

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

錯(cuò)誤拋出:trigger_error()

trigger_error() 觸發(fā)的錯(cuò)誤不會(huì)被 try-catch 異常捕獲語(yǔ)句捕獲

PHP錯(cuò)誤處理

set_error_handler()

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

register_shutdown_function()

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

PHP異常處理

set_exception_handler()

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

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

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

Exception: " , $exception->getMessage();
    }
}
 
set_exception_handler(array("App","myException"));
 
throw new Exception("Uncaught Exception occurred");
?>
PHP異常分類

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

1、沒(méi)有通過(guò)驗(yàn)證器
2、沒(méi)查詢到結(jié)果
3、需要向用戶返回具體信息
4、不需要記錄日志
5、可作為異?;蛘卟蛔鳛楫惓?,根據(jù)需求和個(gè)人情況而定

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

1、代碼出錯(cuò)
2、調(diào)用第三方接口錯(cuò)誤
3、不需要向用戶返回具體信息
4、需要記錄日志

在程序中PHP異常的自動(dòng)拋出

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

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

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

 getMessage() . "
"; } echo "end"; ?> 執(zhí)行結(jié)果: Division by zero end
PHP7 異常處理的大變化

一段TP5源代碼引出PHP7異常的變化明明set_exception_handler()函數(shù)只可以捕獲Exception類或派生類的對(duì)象,為何還需要捕獲的對(duì)象做判斷呢?結(jié)果引出了PHP7的變化,請(qǐng)看下面分析

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

在PHP7之前,Deprecated、Notice、Waning這類錯(cuò)誤是可以捕獲的(使用set_error_handler()函數(shù)),而Fatel Error無(wú)法捕獲的

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

示例代碼

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22991.html

相關(guān)文章

  • 淺析php中的異常錯(cuò)誤

    摘要:異常與錯(cuò)誤異常是指程序運(yùn)行中不符合預(yù)期情況以及與正常流程不同的狀況。在中主要的錯(cuò)誤等級(jí)如下最低級(jí)別的錯(cuò)誤,表示不推薦不建議。小結(jié)中錯(cuò)誤和異常是兩個(gè)不同的概念,這種設(shè)計(jì)根本上導(dǎo)致了的異常和錯(cuò)誤與其它語(yǔ)言相異。中,異常時(shí)錯(cuò)誤唯一的報(bào)告方式。 異常與錯(cuò)誤 異常是指程序運(yùn)行中不符合預(yù)期情況以及與正常流程不同的狀況。錯(cuò)誤則屬于自身問(wèn)題,是一種非法語(yǔ)法或者環(huán)境問(wèn)題導(dǎo)致的、讓編譯器無(wú)法通過(guò)檢查設(shè)置無(wú)...

    Leck1e 評(píng)論0 收藏0
  • PHP錯(cuò)誤異常處理

    一、PHP錯(cuò)誤處理 1.語(yǔ)法錯(cuò)誤2.運(yùn)行時(shí)錯(cuò)誤3.邏輯錯(cuò)誤:不提示錯(cuò)誤,但功能不對(duì),最麻煩4.三種級(jí)別:notice/warning/fatal error(無(wú)法繼續(xù)執(zhí)行)5.錯(cuò)誤報(bào)告顯示: a.可以在php.ini中修改error_reporting項(xiàng)目,以限定錯(cuò)誤報(bào)告類型,如:error_reporting=E_ALL & ~E_NOTICE b.只修改某個(gè)腳本內(nèi)的錯(cuò)誤顯示,可以使用error...

    mumumu 評(píng)論0 收藏0
  • PHP7新特性小結(jié)

    摘要:標(biāo)量類型聲明在中,引入了一個(gè)新的特性,即標(biāo)量類型聲明。棄用樣式構(gòu)造函數(shù)是與它們定義的類具有相同名稱的方法,現(xiàn)在已被棄用,并且將來(lái)將被刪除。 showImg(https://segmentfault.com/img/remote/1460000012438557?w=1024&h=456); 說(shuō)明 PHP 7使用新的Zend Engine 3.0將應(yīng)用程序性能提高近兩倍,內(nèi)存消耗比PHP...

    Steven 評(píng)論0 收藏0
  • PHP框架中的日志系統(tǒng)

    摘要:一的幾個(gè)函數(shù)異常捕獲自定義處理函數(shù)注冊(cè)錯(cuò)誤捕獲自定義處理函數(shù)注冊(cè)程序執(zhí)行時(shí)異常終止錯(cuò)誤捕獲處理函數(shù)注冊(cè)這三個(gè)函數(shù)在錯(cuò)誤處理控制中給開(kāi)發(fā)者提供了很大的自主空間,在日志系統(tǒng)中記錄日志信息有他們的功勞。下面要說(shuō)的類庫(kù)是借鑒了日志系統(tǒng)的設(shè)計(jì)。 引言 接觸過(guò)php框架的朋友們可能都知道,日志在項(xiàng)目中的重要作用了,他可以幫助我們定位錯(cuò)誤的位置,讓程序更友好(處理得當(dāng)?shù)脑挷粫?huì)直接拋出一大堆只有程...

    ningwang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<