【常見的錯誤類型】
① 語法錯誤
【例1】程序語句結尾少了';'
<?php $username = "dee" //少了分號; echo $username;
輸出:
( ! ) Parse error: syntax error, unexpected T_ECHO in D:\practise\php\Error\error1.php on line 3
Parse error:解析錯誤
syntax error:語法錯誤
【PHP 中的錯誤級別】16 種
E_ERROR | 致命的運行時錯誤。終止程序執行。 |
E_WARNING | (運行時警告)非致命的 run-time 錯誤。不暫停腳本執行。 |
E_PARSE | 語法解析錯誤 |
E_NOTICE | 通知(注意),表示可能表現為錯誤的情況 |
E_CORE_ERROR | 在 PHP 初始化啟動過程中發生的致命錯誤 |
E_CORE_WARNING | PHP 初始化啟動過程中發生的警告 |
E_COMPILE_ERROR | 致命編譯錯誤 |
E_COMPILE_WARNING | 編譯時警告 |
E_USER_ERROR | 用戶產生的錯誤信息,類似E_ERROR,但是是由於用戶自己在代碼中使用trigger_error()函數產生的 |
E_USER_WARNING | 用戶產生的警告信息,類似E_WARNING,但是是由用戶自己在代碼中使用trigger_error()函數產生的 |
E_USER_NOTICE | 用戶產生的通知信息,類似E_NOTICE,但是是由用戶自己在代碼中使用trigger_error()函數產生的 |
E_STRICT | 啟動PHP對代碼的修改建議,以確保代碼具有最佳的互操作性和向前兼容性 |
E_DEPRECATED | 運行時通知,啟動后將會對在未來版本中可能無法正常工作的代碼給出警告 |
E_USER_DEPRECATED | 用戶產生的警告信息,類似E_DEPRECATED,但是是通過trigger_error()函數產生的 |
E_ALL | 所有的錯誤和警告信息 |
E_RECOVERABLE_ERROR | 可被捕獲的指明錯誤它表示可能發生了一個可能非常危險的錯誤,但是還沒有導致PHP 引擎處於不穩定的狀態。如果該錯誤沒有被用戶自定義句柄捕獲(見set_error_handler()),將成為一個E_ERROR,從而腳本會終止運行。 |
a. Deprecated 最低級別的錯誤 —— 不推薦 或 不建議
【例2】
<?php if(ereg('dee', 'welcome to dee\'s medows', $matches)){ print_r($matches); }else{ echo 'not found'; }
輸出:
( ! ) Deprecated: Function ereg() is deprecated in D:\practise\php\Error\error1.php on line 2 Array ( [0] => dee )
deprecated:不推薦的,過時的(可以使用 preg_match 代替 ereg 方法),但同時程序也輸出了結果。
【例3】(PHP 5.3 以上版本)
<?php echo mysql_escape_string('\' or 1 = 1 #');
輸出:
Deprecated:mysql_escape_string():This Function id deprecated: use mysql_real_escape_string() instead. in **** \' or 1 = 1 #
b. Notice 通知級別的錯誤 —— 語法中存在一些不當的地方。PHP 是弱類型語言,變量可以不聲明直接使用,當直接使用某個變量的時候,就會發送一個 notice 級別的錯誤告訴你這個變量沒有聲明:undefined variable;再如數組索引,如果下標是字符串類型時,在使用數組索引(下標)時沒有加引號,php 則會將其當成常量解析,如果沒有找到這個常量,才將其當成下標去解析。
【例4】
<?php echo $dee; //程序繼續執行 echo 'continue';
輸出:
( ! ) Notice: Undefined variable: dee in D:\practise\php\Error\error1.php on line 2
continue
【例5】
<?php $userInfo = array('username'=>'dee', 'age'=>28); echo $userInfo['username']; echo '<hr>'; echo $userInfo[age]; //會產生 notice 級別的錯誤 echo '<hr>'; echo 'continue';
輸出:
dee ( ! ) Notice: Use of undefined constant age - assumed 'age' in D:\practise\php\Error\error1.php on line 5 28 continue
Use of undefined constant age :未定義的常量 age
所以這種寫法是不規范的。
c. Warning 警告級別的錯誤—— 語法中不恰當的地方;或者函數希望得到兩個參數,但是調用函數時只傳遞了一個參數;或者參數的類型,參數的值不正確
【例6】
<?php settype($var, 'int'); // 變量 var 的類型設置為 int var_dump($var); //設置一個不存在的類型,warning settype($var, 'dee'); var_dump($var); echo 'continue';
輸出:
int 0 ( ! ) Warning: settype() [function.settype]: Invalid type in D:\practise\php\Error\error1.php on line 6 int 0 continue
Invalid type:非法的類型
(未完:Fatal 等)
② 環境錯誤
③ 邏輯錯誤