php 錯誤級別種類有哪些

2023-01-31 06:02:37

php錯誤級別種類:1、解析錯誤或語法錯誤,這種錯誤會停止程式的執行,並顯示出錯資訊;2、致命錯誤;3、警告錯誤,是指程式的語法沒有錯誤,但在執行的過程中,發現程式有些不合理的地方,從而提示出警告資訊,而程式會繼續向下執行;4、注意錯誤,類似於警告錯誤,這意味著該程式包含錯誤,但它允許執行指令碼;5、最低階別的錯誤(不推薦,不建議),使用一些過期函數的時候會出現,程式繼續執行。

本教學操作環境:windows7系統、PHP8版、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); 
?>
登入後複製

1.png

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

3、警告錯誤(Warning):

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

範例:把 0 作為除數時,會造成程式執行錯誤並輸出錯誤資訊。

<?php
    $a = 1;
    $b = 0;
    $c = $a / $b;
    echo "$a / $b = $c";
?>
登入後複製

錯誤:

2.png

4、注意錯誤(Notice):

它類似於警告錯誤,這意味著該程式包含錯誤,但它允許執行指令碼。在使用一些未定義變數、常數或者陣列key沒有加引號的時候會出現,程式繼續執行

<?php  
header("content-type:text/html;charset=utf-8");
$x = "PHP中文網"; 
echo $x; 
echo $y; 
?>
登入後複製

3.png

說明:此程式使用未宣告的變數 $y,因此它給出了錯誤訊息。

5、 最低階別的錯誤(Deprecated,不推薦,不建議)

使用一些過期函數的時候會出現,程式繼續執行。

二、PHP錯誤設定

1. 修改PHP的組態檔php.ini

error_reporting = E_ALL&~E_NOTICE; //設定錯誤報告級別
display_errors = 1; //開發環境開啟,生產環境關閉
登入後複製

2. 使用error_reporting()函數

這種方式設定後,可以立即生效。但僅限於在當前指令碼中的error_reporting()函數呼叫的後面區域。

int error_reporting ([ int $level ] )1.
登入後複製

引數可以是整型或對應的常數識別符號,推薦使用常數的形式。返回值為當前位置處起作用的錯誤報告級別的值(整型值)。

注意:組態檔php.ini中display_errors的預設值為On,代表顯示錯誤提示,如果設定為Off,就會關閉所有的錯誤提示。

使用 error_reporting(0) 或者在函數前面加 @,可以抑制錯誤輸出,以防止錯誤訊息洩露敏感資訊。

引數level

新的 error_reporting 級別。 可以是一個位掩碼也可以是一個已命名的常數。

建議使用已命名的常數,以確保相容將來的版本。 由於錯誤級別的新增、整數取值範圍的增加,

較久的基於整數的錯誤級別不會總是和預期的表現一致。

level 可能的值(php中的報錯級別)

常見:總共大概15個

1.png

15個正好對應二進位制的15位。

需要注意的是, 上述表中的欄位, 不是一成不變的, 不同的PHP版本, 值可能會不同

任意數目的以上選項都可以用「或」來連線(用 OR 或 |),這樣可以報告所有需要的各級別錯誤。

例如,下面的程式碼關閉了使用者自定義的錯誤和警告,執行了某些操作,然後恢復到原始的報錯級別:

例:

<?php
     error_reporting(0);                //禁用錯誤報告
     error_reporting(E_ERROR | E_WARNING | E_PARSE);//報告執行時錯誤
     error_reporting(E_ALL);            //報告所有錯誤
     error_reporting(E_ALL ^ E_NOTICE); //除E_NOTICE報告所有錯誤,是在php.ini的預設設定
     error_reporting(-1);               //報告所有 PHP 錯誤
     error_reporting(3);                //不報E_NOTICE
     error_reporting(11);               //報告所有錯誤
     ini_set('error_reporting', E_ALL); // 和 error_reporting(E_ALL); 一樣
     error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);//表示php錯誤,警告,語法錯誤,提醒都返錯。
?>
登入後複製

三、PHP異常

PHP的異常是PHP5的新增特性,與JAVA/C#的異常不同,PHP異常需要手動丟擲throw new Exception,而不是系統自動丟擲。

PHP錯誤與異常的區別,他們是2個不同的概念,但有共同的地方:
如果異常不捕獲處理,程式將會終止,並報出Fatal Error 錯誤,看到這裡大家就會覺得異常是不是錯誤的一種,這是一種錯覺,但這樣理解也可以。但異常捕獲後程式可以繼續執行,而真正的Fatal Error錯誤出現後程式就必須終止。

異常可以使用 try{}catch(){} 來捕獲捕獲,捕獲之後後續程式碼可以繼續執行;而錯誤是無法使用 try{}catch(){} 捕獲的。
如果丟擲了異常,就必須捕獲它,否則程式終止執行。

推薦學習:《》

以上就是php 錯誤級別種類有哪些的詳細內容,更多請關注TW511.COM其它相關文章!