在之前的文章中給大家?guī)砹恕段宸昼妿憧炊甈HP中的異常處理是什么情況》,其中詳細(xì)介紹了有關(guān)PHP異常處理類的問題,本篇文章我們一起來繼續(xù)看一看PHP錯誤處理的相關(guān)知識,PHP的錯誤類型和PHP的錯誤級別,希望對大家有幫助!
程序員再開發(fā)過程中難免有些失誤,或者由其他的原因也會造成錯誤的發(fā)生,那這時候我們就有必要了解一下PHP中有哪些錯誤類型以及有哪些錯誤級別了。大家也可以點(diǎn)擊免費(fèi)的《php錯誤處理》教學(xué)視頻來學(xué)習(xí)相關(guān)的知識。
PHP錯誤類型
PHP 程序的錯誤發(fā)生一般分為三類,它們分別是語法錯誤、執(zhí)行時錯誤和邏輯錯誤。
-
語法錯誤
語法錯誤是在編程中最容易碰到也是最容易解決的一種錯誤,例如:遺漏一個分號時就會顯示錯誤信息。這種錯誤會停止程序的執(zhí)行,并顯示出錯信息。我們可以根據(jù)錯誤信息改正程序,然后重新執(zhí)行。
語法錯誤可以說是我們在編程過程中最容易碰到的一種錯誤類型了,同時我覺得他也是最容易解決的一種錯誤;例如:輸入時忘記輸入了一個分號或者函數(shù)語法弄錯了。
<?php $a = 1 echo $a; ?>
在上述示例中,第二行最后少了一個分號,輸出結(jié)果出現(xiàn)錯誤。
添加分號之后程序正常運(yùn)行,輸出結(jié)果為1。由此我們可以看出,當(dāng)語法錯誤時,程序會停止向下繼續(xù)執(zhí)行,當(dāng)語法錯誤解決之后,程序才可以繼續(xù)執(zhí)行。
-
運(yùn)行時錯誤
運(yùn)行時錯誤就是再程序運(yùn)行過程中出現(xiàn)了錯誤,這時候需要注意的是,語法并沒有錯誤,但是再執(zhí)行的過程中,PHP會警告你程序有不合理的地方,與語法錯誤不同的是,程序會繼續(xù)向下運(yùn)行。
示例如下:
<?php $a = 1; $b = 0; $c = $a / $b; echo "$a / $b = $c"; ?>
在上述示例中,語法并沒有錯誤,但是0不能作為除數(shù),輸出結(jié)果:
-
邏輯錯誤
邏輯錯誤的程序會正常的執(zhí)行,但是輸出的結(jié)果卻不對,其根本原因發(fā)生在我們寫的代碼上,程序執(zhí)行過程中沒有報警信息。示例如下:
<?php $a = 1; $b = 2; if($a = $b){ echo '$a = $b'; }else{ echo '$a != $b'; } ?>
輸出結(jié)果:
由上述示例我們可以看出,輸出結(jié)果明顯不對,不符合邏輯,出現(xiàn)邏輯錯誤時,是沒有報警信息的。這需要我們一定要提高警惕,不要出現(xiàn)邏輯錯誤。
拓展知識:PHP錯誤級別
PHP中既有錯誤類型,也定義了錯誤級別,可以在php.ini中定義錯誤級別。(點(diǎn)擊《PHP如何上傳文件?看完就明白了!》查看如何找到php.ini)
PHP中的錯誤類型如下所示:
1 —E_ERROR
—致命的運(yùn)行時錯誤,一般是不可恢復(fù)的情況,例如內(nèi)存分配導(dǎo)致的問題,后果是導(dǎo)致腳本終止、不再繼續(xù)運(yùn)行。
2 — E_WARNING
— 運(yùn)行時警告(非致命錯誤),僅給出提示信息,但是腳本不會終止運(yùn)行。
4 — E_PARSE
— 編譯時語法解析錯誤,僅由分析器產(chǎn)生。
8 — E_NOTICE
—運(yùn)行時通知,表示腳本遇到可能會表現(xiàn)為錯誤的情況,但是在可以正常運(yùn)行的腳本里面也可能會有類似的通知。
16 — E_CORE_ERROR
— 在 PHP 初始化啟動過程中發(fā)生的致命錯誤,類似 E_ERROR,但是是由 PHP 引擎核心產(chǎn)生的。
64 — E_COMPILE_ERROR
— 致命編譯時錯誤,類似 E_ERROR,但是是由 Zend 腳本引擎產(chǎn)生的。
128 — E_COMPILE_WARNING
— 編譯時警告(非致命錯誤),類似 E_WARNING,但是是由 Zend 腳本引擎產(chǎn)生的。 。
1024 — E_STRICT
— 啟用 PHP 對代碼的修改建議,以確保代碼具有最佳的互操作性和向前兼容性。
8192 — E_DEPRECATED
— 運(yùn)行時通知,啟用后將會對在未來版本中可能無法正常工作的代碼給出警告。
16384 — E_USER_DEPRECATED
— 用戶產(chǎn)生的警告信息,類似 E_DEPRECATED,但是是由用戶自己在代碼中使用 PHP 函數(shù) trigger_error() 來產(chǎn)生的。
30719 — E_ALL
— E_STRICT 除外的所有錯誤和警告信息。
想要了解