PHP 錯誤與異常 筆記與總結(1)錯誤(Deprecated,Notice,Warning)


【常見的錯誤類型】

① 語法錯誤

【例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 等)

 

② 環境錯誤

 

③ 邏輯錯誤

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM