php中常見的錯誤類型有:1、Parse error類型,表示解析錯誤或語法錯誤;2、Fatalerror類型,表示致命錯誤;3、Warning類型,表示警告錯誤;4、Notice類型,表示注意錯誤;5、Deprecated類型,表示最低等級的錯誤。
本教學作業系統:Windows10系統、PHP8.1版、Dell G3電腦。
一、PHP錯誤類型
PHP錯誤等級
Parse error > Fatal Error > Waning > Notice > Deprecated
1、解析錯誤或語法錯誤(Parse error)
語法錯誤是程式設計中最容易碰到也是最容易解決的錯誤,例如:遺漏一個分號時就會顯示錯誤訊息。這種錯誤會停止程式的執行,並顯示出錯訊息。我們可以根據錯誤訊息改正程序,然後重新執行。
【範例】下面透過簡單的程式碼示範常見語法錯誤以及相關的錯誤訊息。
<?php $a = 1; $b = 2; $c = $a + $b echo ; ?>
上面程式碼中第4 行末尾省略了;,所以運行上面的程式碼會顯示如下錯誤訊息:
Parse error: syntax error, unexpected 'echo' (T_ECHO) in D:\WWW\index.php on line 5
從上面的範例和運行結果可以看出,語法錯誤會阻止程式繼續向下執行。只有解決了這些錯誤後程式才可以順利執行。
2、致命錯誤(Fatal error):
這是PHP編譯器理解PHP程式碼但它辨識未宣告的函數的錯誤型別。這意味著在沒有函數定義的情況下呼叫函數。
程式直接報錯,需要修改程式碼! ! !中斷程式執行,可使用register_shutdown_function()函數在程式終止前觸發一個函數,例如
<?php function add($x, $y) { $sum = $x + $y; echo "sum = " . $sum; } $x = 0; $y = 20; add($x, $y); diff($x, $y); ?>
說明:在第10行中,呼叫了函數diff(),但函數diff()沒有的宣告定義,所以它給了錯誤。
3、警告錯誤(Warning):
程式的語法沒有錯誤,但是在執行的過程中,PHP會發現程式有些不合理的地方,從而提示出警告訊息,但程式會繼續向下執行。
範例:把0當作除數時,會造成程式運作錯誤並輸出錯誤訊息。
<?php $a = 1; $b = 0; $c = $a / $b; echo "$a / $b = $c"; ?>
錯誤:
4、注意錯誤(Notice):
它類似於警告錯誤,這意味著該程式包含錯誤,但它允許執行腳本。在使用一些未定義變數、常數或陣列key沒有加引號的時候會出現,程式繼續執行
<?php header("content-type:text/html;charset=utf-8"); $x = "PHP中文网"; echo $x; echo $y; ?>
說明:此程式使用未宣告的變數 $y,因此它給出了錯誤訊息。
5、 最低等級的錯誤(Deprecated,不推薦,不建議)
使用一些過期函數的時候會出現,程式繼續執行。
二、PHP錯誤配置
除了在腳本裡設置,還可以在php.ini設定檔裡配置
error_reporting = E_ALL&~E_NOTICE; //设置错误报告级别 display_errors = 1; //开发环境开启,生产环境关闭
三、PHP異常
PHP的例外是PHP5的新增特性,與JAVA/C#的例外不同,PHP異常需要手動拋出throw new Exception,而不是系統自動拋出。
PHP錯誤與異常的區別,他們是2個不同的概念,但有共同的地方:
如果異常不捕獲處理,程式將會終止,並報出Fatal Error錯誤,看到這裡大家就會覺得異常是不是錯誤的一種,這是一種錯覺,但這樣理解也可以。但異常捕獲後程式可以繼續執行,而真正的Fatal Error錯誤出現後程式就必須終止。
異常可以使用try{}catch(){}
來捕獲捕獲,捕獲之後後續程式碼可以繼續執行;而錯誤是無法使用try{}catch(){ }
捕獲的。
如果拋出了異常,就必須捕獲它,否則程式終止執行。
四、PHP異常與錯誤的拋出
異常拋出:throw new Exception('Some Error Message');
錯誤拋出:trigger_error();
#trigger_error()
觸發的錯誤不會被try-catch異常捕獲語句捕獲
五、PHP錯誤處理
set_error_handler()
只能處理Deprecated、Notice、Waning這三種層級錯誤,而且處理後,腳本將會繼續執行發生錯誤的後一行。
register_shutdown_function()
這個方法是腳本結束前的最後一個回呼函數,所以無論是die()/錯誤(異常)/還是腳本正常結束都會呼叫
#六、PHP異常處理
set_exception_handler()
設定預設的異常處理程序,有try/catch捕獲的話這個函數就不會執行,反之就會執行,而且執行的話,腳本將不會繼續執行發生異常的後一行程式碼,程式馬上中止
set_exception_handler()
注意事項
set_exception_handler(“myException”)
不仅可以接受函数名,还可以接受类的方法(公开的静态方法 及 公开的非静态方法 都可以),但需要以 数组形式 传递,数组的第一值为“类名”,第二个参数为“方法名”,如下代码所示:
<?php class App{ function myException($exception) { echo "<b>Exception:</b> " , $exception->getMessage(); } } set_exception_handler(array('App','myException')); throw new Exception('Uncaught Exception occurred'); ?>
七、PHP7 异常处理的大变化
在PHP7之前,Deprecated、Notice、Waning这类错误是可以捕获的(使用set_error_handler()
函数),而Fatel Error无法捕获的。
在PHP7之后,出现了一个异常与错误通用的接口Throwable,Exception类与Error类都实现了该接口,导致Error类或Error类的派生类的错误对象(大部分Fatel Error,而之前三类错误不变)也可以像Exception一样被捕获(2种捕获方法:1、try/catch 2、set_exception_handler())。
以上是php常見的錯誤類型有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!