PHP基礎補全系列 異常處理

2021-07-25 05:02:03 字數 2036 閱讀 8624

異常處理在php裡也是個很有爭議的問題,記得之前做專案的時候,關於異常處理和當時的同事討論了很久。

不過今天不討論這些東西,只是單純做個記錄。

這篇部落格分三個部分:

異常處理的基本使用

擴充套件中丟擲的異常,以pdo舉例

將錯誤資訊委託給異常處理

一些需要注意的tips:

異常處理的基本使用

需要注意以下幾點:

具體見**:

<?php

function division ($a, $b)

return $a / $b;

}try catch (exception $e)

//結果:異常**獲,輸出"division by zero"

class user_exception extends exception

function user_division ($a, $b)

return $a / $b;

}try catch (user_exception $e) catch (exception $e)

//異常**獲,輸出"division by zero"

try catch (user_exception $e) catch (exception $e)

//異常**獲,輸出"user division by zero"

try catch (user_exception $e) catch (exception $e) finally

//異常**獲,finally**被執行,輸出"division by zerofinally is excuted";

//需要特別之處,finally這個特性是由鳥哥在php5.5的版本實現的,見鳥哥的部落格

//另乙個需要注意的地方是,如果在catch**塊中返回了結果,finally還是會繼續執行,並且finally的返回值會覆蓋catch中的返回值

function testfinally () catch (exception $e) finally

}echo testfinally();

/** * catch和finally**塊均執行,輸出結果為

* catch exception

* finally executed

* 1* catch**塊的返回值被finally**塊的返回值覆蓋

*/

pdo擴充套件的demo

具體見**:

<?php

try catch (pdoexception $e)

//異常**獲,輸出"catch exception:sqlstate[hy000] [2002] connection refused"

//這個地方特別有意思,如果不設定錯誤處理方式,連線錯誤會預設丟擲乙個pdo異常,但是查詢錯誤缺省會返回false;

set_error_handler(function ($error, $errorstr) );

try catch (pdoexception $e)

//將錯誤處理設定為pdo::errmode_warning,不會丟擲異常,而是提示乙個warning資訊.

//這裡特別有意思的地方是,如果我不做處理,命令列裡會提示兩個報警資訊.如果我加入set_error_handler,將錯誤資訊列印出來,則只有乙個warning資訊.

//感覺有時間可以寫兩篇關於pdo擴充套件和php錯誤處理的部落格

將錯誤資訊委託給異常處理

具體見**:

<?php

class error_exception extends exception

}set_error_handler(function ($errno, $errstr, $errfile, $errline) );

try catch (error_exception $e)

//異常**獲,輸出"division by zero"

PHP基礎補全系列 static

昨天晚上睡了大概兩個小時。感覺今天一天整個人的狀態都特別萎靡。在手冊中,static主要實現兩個作用,1.定義靜態變數和靜態方法 2.實現後期靜態繫結 延遲靜態繫結 定義靜態變數和靜態方法主要是需要注意宣告和呼叫的方式。1.手冊中提到靜態屬性不能使用表示式宣告。這個並不嚴謹,實際測試使用類似於 2 ...

PHP系列(七)PHP錯誤異常處理

1 php錯誤報告級別 1 e error 致命的執行錯誤。錯誤無法恢復,暫停執行指令碼。2 e warning 執行時警告 非致命性錯誤 非致命的執行錯誤,指令碼執行不會停止。4 e parse 編譯時解析錯誤。解析錯誤只由分析器產生。8 e notice 執行時提醒 這些經常是你 中的bug引起...

PHP異常處理

php 4 require once cmd php4 command.php class commandmanager php if file exists path require once path if class exists cmd ret new cmd if is a ret,com...