1. 程式人生 > >PHP之 錯誤 與 異常處理

PHP之 錯誤 與 異常處理

函數 用戶 exceptio 產生 存放位置 如果 date error_log reporting

PHP的錯誤報告有三種:

1.錯誤,語法解析錯誤,致命錯誤
2.警告
3.註意

錯誤 -> 致命錯誤,會終止已下程序的執行,語法錯誤的話,PHP壓根就沒執行
警告 -> 他不會終止運行,但會影響結果
註意 -> 不會終止執行,也不會影響結果


為了讓用戶得到更好的體驗,我們屏蔽所有錯誤的輸出,是輸出,而不是顯示
但這樣的話,管理員也看不到錯誤了。

頁面上不顯示錯誤,而將錯誤生成一個日誌,提供給管理員查看。

error_reporting(~E_ALL)將所有輸出都屏蔽掉了,自然,管理員也看不到了

我不要屏蔽所有輸出,我只要屏蔽所有顯示

ini_set(‘display_errors‘,‘off‘);表示屏蔽了所有的頁面上錯誤的顯示,但沒有屏蔽錯誤的輸出

ini_set(‘log_errors‘,‘on‘);    //開啟日誌寫入功能
ini_set(‘error_log‘,‘myerror.log‘); //日誌的存放位置
ini_set(‘display_errors‘,‘off‘);    //屏蔽頁面顯示
error_reporting(E_ALL);    //輸出所有錯誤
echo 123;
echo $str;    //這個會出現一個註意,表示未聲明變量
echo date();  //警告,沒有傳參
echo dae();   //致命錯誤,找不到這個函數
echo 123;

異常:

PHP語言裏,所有異常都必須自己拋出,而不像 JAVA 之類的語言會自動

拋出異常,這也正是 PHP源代碼裏很少看到異常處理語句的原因之一。

<?php

// 如果PHP內置了處理被除數不能為零的異常類,那麽是不需要手動拋出的

$a = 5;
$b = 0;
try {
    echo $a / $b;
} catch (Exception $e) {
    echo ‘發現異常了‘;        
}

// 這種情況下,是不會執行捕獲語句的,頁面上依舊顯示報錯信息:Warning: Division by zero

<?php

//PHP無法自動拋出異常,所以需要我們手動拋出

$a = 5;
$b = 0;
try {
    if ($b
== 0) throw new Exception(‘被除數為零‘); echo $a / $b; } catch (Exception $e) { echo ‘產生異常:‘.$e->getMessage(); }

頁面輸出: 產生異常:被除數為零

PHP之 錯誤 與 異常處理