首先要說一下常見的三種錯誤:
1.語法錯誤
2.執行錯誤
3.邏輯錯誤
00x1 錯誤報告及錯誤級別
php的錯誤分為三個等級
1.注意(notice) 沒有變數a
2.警告(warning) 沒有給函式傳值
3.致命的錯誤(fatal error) 函式寫錯
錯誤的報告級別可以在php.ini當中修改。
在php.ini當中找到錯誤報告「error_reporting = e_all 」 這個的意思是將所有的錯誤都提示出來。
ps:~是除了的意思。&是和的意思。
error_reporting = e_warning & e_fatal error (僅提示警告warning和致命錯誤fatal error)
error_reporting = e_all ~ e_notice (提示全部,除了注意notice)
00x2 自定義php報告錯誤處理方式
什麼叫做自定義報告錯誤的處理方式呢?
也就是( ! ) fatal error: call to undefined function geaaattype() in d:\wamp\www\dnf.php on line 2
按照我們意圖來寫。
很顯然這個錯誤是php自己系統已經自帶的。那麼我們需要告訴php我們不要你自身的這個錯誤函式,我要自己建立乙個。
set_error_handler("myerrorfun");(handler音譯:處理)這個語句就是告訴php我要自己建立乙個myerrorfun的錯誤資訊。然後你需要定義一下這個函式。**大概如下所示:
<?php00x3 設定錯誤日誌在php.ini當中有顯示錯誤:display_errors = on 預設是開著的,我們可以off關閉它。apache的日誌檔案:log_errors = onset_error_handler("myerrorfun");#
註冊乙個myerrorfun的錯誤函式
function myerrorfun($type,$mess,$file,$line)
?>
如果想要把apache的日誌檔案寫入windows的系統日誌裡面,就可以將:error_log = syslog開啟。預設是被注釋掉的。分號是注釋。
00x4 php異常處理(try catch)
如果有trow new exception的話那麼就是有異常。
1本來是按照順序,1-2-3-4-5-6....這樣執行的,但是當程式執行到throw new exception(拋出新的異常)的時候就會直接跳過第六行去執行第8行的,而<?php
2echo "早上起床";3
trycatch(exception$e)
11 ?>
會被賦值給$e,exception其實是乙個類,系統定義好的乙個類,可以通過呼叫getmessage來獲取第5行裡面的「車子爆胎」這個資料。倘若沒有throw new exception的話,就會直接向下執行,說路況很好,進而不執行第9行的**。
那麼問題來了,怎麼知道系統發生錯誤了呢???
思路:可以註冊乙個錯誤函式(00x2有講到),然後使用if判斷錯誤的型別。
案例:
<?php結果爆出如下錯誤:set_error_handler("myerrorfun");
function myerrorfun($type,$mess,$file,$line
),,");
}}function say($language)
say();
#故意錯誤的使用函式。
?>
( ! ) fatal error: uncaught exception 'exception' with message '出現了嚴重的錯誤。missing argument 1 for say(), called in d:\wamp\www\test.php on line 11 and defined,d:\wamp\www\test.php,8' in d:\wamp\www\test.php on line 5
( ! ) exception: 出現了嚴重的錯誤。missing argument 1 for say(), called in d:\wamp\www\test.php on line 11 and defined,d:\wamp\www\test.php,8 in d:\wamp\www\test.php on line 5
那麼正確書寫say函式的話就不會報錯了。
<?phpset_error_handler("myerrorfun");
function myerrorfun($type,$mess,$file,$line
),,");
}}function say($language)
say("珍惜愛你的人,不要等失去才珍惜。我會一直愛著你。");#
故意錯誤的使用函式。
00x4 自定義異常類
前面學習到的exception是系統早就有了的異常類,那麼我們可不可以自定義異常類呢?答案無疑是肯定的。
<?php00x5多個異常處理class myexception extends
exception
}echo "11111111111
";try
catch(myexception $e
) ?>
<?php輸出效果如下所示:$kaichu = "no";
class gowc_exception extends
exception
}class chizaodian_exception extends
exception
}class qushangban_exception extends
exception
}class shangban_exception extends
exception
}echo "早上起床
";//
-------------------------------------第乙個錯誤-----------------
try catch(gowc_exception $e)//
-------------------------------------第二個錯誤-----------------
trycatch(chizaodian_exception $e)//
-------------------------------------第三個沒有錯誤-----------------
trycatch(qushangban_exception $e)//
-------------------------------------使用if判斷---------------------
try
echo "工作完成。";
}catch(shangban_exception $e
) ?>
跟著百度學PHP 11 PHP當中的異常處理
首先要說一下常見的三種錯誤 1.語法錯誤 2.執行錯誤 3.邏輯錯誤 00x1 錯誤報告及錯誤級別 php的錯誤分為三個等級 1.注意 notice 沒有變數a 2.警告 warning 沒有給函式傳值 3.致命的錯誤 fatal error 函式寫錯 錯誤的報告級別可以在php.ini當中修改。在...
跟著百度學PHP 9 session會話
參考 session變數用於儲存有關使用者的會話的資訊,或更改使用者會話的設定,session變數儲存的資訊是單一使用者的,並且可 用程式中的所有頁面使用。session的工作機制就是為每乙個訪問者建立乙個唯一的id uid 並基於這個uid來儲存變數。uid儲存在cookie中,亦或通過url進行...
跟著百度學PHP 14 PDO 優化驅動
使用方法設定預定義變數 pdo的方法 屬性 pdo預定義常量 ps 可以使用預定義常量來獲取一些伺服器或者客戶端的資訊 語法 pdo屬性或者方法 pdo域定義變數 案例 try catch exception e echo pdo getattribute pdo attr driver name ...