本文目錄一覽:
- 1、關於php異常的問題,到底有什麼好處
- 2、php 異常處理 如何捕獲異常??必須要拋出才可以嗎?
- 3、php的異常是不是必須手動捕獲,是不是必須用if判斷的形式拋出異常?
- 4、PHP異常處理的疑惑
- 5、PHP TRY CATCH具體求解
- 6、php try catch 捕獲哪些錯誤
關於php異常的問題,到底有什麼好處
在java、python等語言中,異常對於我們來說已經是必不可少的錯誤處理方式。異常處理是面向對象編程中的一種很強大的特性,然而很多PHPer對它不了解,甚至認為它會破壞代碼結構。即使在很多開源項目中,也難以見到異常的蹤影。那麼,PHP中的異常,到底有沒有意義呢?
PHP有兩種錯誤處理機制,一種是內置錯誤,一種是異常。
內置錯誤,包含error、warning、notice等錯誤類型。很多PHP的內置函數,和一些PHP擴展,都會使用這種類型的錯誤。此類錯誤的優勢是處理起來比較方便。不重要的錯誤,可以通過配置php選項來忽略它。我們甚至可以通過set_error_handler()函數,來集中處理非致命的錯誤。但是,PHP的寬容往往會讓程序員養成一個壞習慣,那就是在代碼中留下大量warning、notice級別的錯誤。這樣對程序的調試和後期維護帶來很多不便。而且致命的錯誤(Fatal Error),是沒有辦法處理的。這也是PHP的一大硬傷。
在PHP中使用異常有以下優勢:
一、異常能提高程序的健壯性。
在需要處理錯誤的場景,異常能讓我們輕鬆掌控程序,採取相應的處理措施。並不是所有的異常都需要處理。在一些異常發生時,沒有其他替代方案,這時我們可以記錄一些錯誤日誌,並讓程序崩潰。在web應用里,我們可以給用戶顯示一個500錯誤頁面來增強用戶體驗。一些PHP的開源庫會提供大量的異常類型,這樣會幫助我們快速找出代碼錯誤,減少程序BUG。
二、異常處理能增強程序的可維護性。
函數應該有一系列的輸入,並且有唯一的輸出。在參數不正確、或者發生系統錯誤時,我們需要告知使用者發生了什麼樣的錯誤,便於使用者處理和記錄。
利用返回值、引用變數來返回錯誤在PHP程序中很常見:
function foo($var) {
if (!is_int($var)) {
return array(-1, ‘參數1必須是整數’);
}
if ($var = 0) {
return array(-2, ‘參數1必須大於0’);
}
return $var;
}
這樣的函數使用非常不方便。使用者需要通過判斷函數的返回值,來確保程序是否正常運行。額外的邏輯判斷,會降低程序的可讀性。
假如函數被修改為這樣:
function foo($var) {
if (!is_int($var)) {
return array(-1, ‘參數1必須是整數’);
}
if ($var = 0) {
return array(-2, ‘參數1必須大於0’);
}
return array($var, ”);
}
這時你外層的判斷邏輯就需要修改,是不是很麻煩?
使用異常,在執行失敗時拋出異常,可以讓函數的輸出非常乾淨,避免額外的處理。減少了代碼量,也增強了程序的可維護性。
三、使用異常有助於我們集中處理錯誤。
在程序拋出異常時,只要沒有遇到try catch,異常會逐漸向函數調用堆棧頂層傳遞。這樣我們不需要每一層都處理錯誤。我們可以在程序的入口處集中處理所有未處理的異常,有助於我們發現潛在的程序BUG。而一個只會返回正常處理結果和錯誤代碼的函數,在其出錯時不得不立即處理。如果我們想在代碼頂層再處理這個錯誤,就不得不一層一層返回這個錯誤,給程序設計帶來很多不便。
綜上,我們應該盡量使用異常,保證程序的可靠性。
php 異常處理 如何捕獲異常??必須要拋出才可以嗎?
難道php裡面就非得用throw才能捕獲異常嗎
==============
是的.異常捕獲不是用來處理語法錯誤,不是用來處理fatal
error,更不是用來處理die()的。它只能用來處理throw出來的異常。
php的異常是不是必須手動捕獲,是不是必須用if判斷的形式拋出異常?
對於學技術來講,應該首先找到方向。目前互聯網的大趨勢還是比較好的,現在想入行找到一個不錯的工作也是比較容易的如果想學網站開發的話可以去看一下後盾網,口碑還不錯。
PHP異常處理的疑惑
SQL錯誤是捕獲不了的,因為PHP只要成功的把SQL命令提交給了資料庫伺服器就算成功,至於資料庫裡面執行是否成功,必需在每個語句之後檢測,例如:
$db=mysql_connect(…);
if (!$db){
echo ‘連接資料庫失敗,錯誤原因:’.mysql_error();
exit;
}
再如:
$sql=’…’;
$res=mysql_query($sql);
if (!$res){
echo ‘執行SQL語句錯誤,SQL語句:’.$sql.’br錯誤原因:’.mysql_error();
exit;
}
PHP TRY CATCH具體求解
php的try catch與其它語言的try catch相比有許多不同,而且用起來相對比較不爽。
php中,如果你製作的站點相對較大,同時模塊化,並且在錯誤處理機制上有一套自己的處理機制,可以嘗試使用try catch,否則,可以考慮不使用它。
PHP的try catch是捕獲異常,但它卻無法捕獲PHP的內部異常,必須是經過throw語句拋出的異常,它才能正常捕獲,這也意味著,如果你的try代碼塊中,沒有任何throw語句,或者包含了throw語句的函數,那麼,try catch語句就是廢品,嘛用沒有。
但是,在大型網站的構建中,用於建設一套自己的自定義錯誤處理機制,try catch就顯現出了它的強大,比如,我在構建一個幾乎整站都會用到的一個公用函數,在這個函數里,我做了大量可能出現的錯誤判斷,並將錯誤throw,那麼在我後面引用這個函數的時候,就可以對其try,並在其catch中對該錯誤進行判斷並做針對性處理。
下面的這做代碼:
function glo(num){
if(is_int(num)){
echo ‘輸入正確’;
}else{
throw new Exception(‘傳值類型錯誤!’);
}
}
那麼以後我一旦調用這個函數,但是傳入的值類型不正確的時候,就會出現異常:
glo(“str”);
這時候如果使用try catch,就可以捕獲這個異常
try{
glo(“str”);
}catch($e){
echo $e-getMessage();
}
__
當然,以上的代碼僅為示例,看起來好像用了try catch還不如不用來得方便,但是到了大型系統中,這樣的機制如果用得有效,則會起到不錯的效果。
————
catch里不能throw
php try catch 捕獲哪些錯誤
PHP5添加了類似於其它語言的異常處理模塊。在 PHP 代碼中所產生的異常可被 throw語句拋出並被 catch 語句捕獲。(註:一定要先拋才能獲取)
需要進行異常處理的代碼都必須放入 try 代碼塊內,以便捕獲可能存在的異常。
每一個 try 至少要有一個與之對應的 catch。
使用多個 catch可以捕獲不同的類所產生的異常。
當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉到最後一個 catch 的後面繼續執行。
當然,PHP允許在 catch 代碼塊內再次拋出(throw)異常。
當一個異常被拋出時,其後(譯者註:指拋出異常時所在的代碼塊)的代碼將不會繼續執行,而 PHP 就會嘗試查找第一個能與之匹配的 catch。
如果一個異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那麼 PHP 將會產生一個嚴重的錯誤,並且輸出 Uncaught Exception … (未捕獲異常)的提示信息。
先來看一下PHP內置異常類的基本屬性和方法。(不包括具體實現)
try{
}
catch(){
throw new Exception();
}
catch(){
//這裡可以捕獲到前面一個塊拋出的Exception
}
為了進一步處理異常,我們需要使用PHP中try{}catch{}—-包括Try語句和至少一個的catch語句。任何調用 可能拋出異常的方法的代碼都應該使用try語句。Catch語句用來處理可能拋出的異常。以下顯示了我們處理getCommandObject()拋出的異常的方法:如果你對php這類有興趣的話,可以和我一樣在後盾人經常看看教材,自己多看幾遍,慢慢的以後就明白了,希望能幫到你,給個採納吧謝謝
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/153509.html