首頁  >  文章  >  後端開發  >  php常見的錯誤類型有哪些

php常見的錯誤類型有哪些

小老鼠
小老鼠原創
2023-04-24 16:10:462018瀏覽

php中常見的錯誤類型有:1、Parse error類型,表示解析錯誤或語法錯誤;2、Fatalerror類型,表示致命錯誤;3、Warning類型,表示警告錯誤;4、Notice類型,表示注意錯誤;5、Deprecated類型,表示最低等級的錯誤。

php常見的錯誤類型有哪些

本教學作業系統: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 &#39;echo&#39; (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); 
?>

php常見的錯誤類型有哪些

說明:在第10行中,呼叫了函數diff(),但函數diff()沒有的宣告定義,所以它給了錯誤。

3、警告錯誤(Warning):

程式的語法沒有錯誤,但是在執行的過程中,PHP會發現程式有些不合理的地方,從而提示出警告訊息,但程式會繼續向下執行。

範例:把0當作除數時,會造成程式運作錯誤並輸出錯誤訊息。

<?php
    $a = 1;
    $b = 0;
    $c = $a / $b;
    echo "$a / $b = $c";
?>

錯誤:

php常見的錯誤類型有哪些

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(&#39;App&#39;,&#39;myException&#39;));
 
throw new Exception(&#39;Uncaught Exception occurred&#39;);
?>

七、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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn