php Try Catch多層級異常測試

2021-06-21 11:16:16 字數 1769 閱讀 8400

<?php

class a catch (exception $e) }}

class b catch (exception $e) }}

class c catch (exception $e) }}

try catch (exception $e)

echo 'end';

?>

頁面try catch裡使用c的 c1,c1裡使用b的b1,b1裡使用a的a1。

預設的是:a1裡丟擲異常,b1裡捕獲a1的異常,然後再把剛才的異常丟擲,c1捕獲,然後丟擲,最後頁面捕獲並輸出。

結果是:

x-powered-by: php/5.1.1

content-type: text/html

#0 d:\workspace\myzcollection\test.php(16): a->a1()

#1 d:\workspace\myzcollection\test.php(28): b->b1()

#2 d:\workspace\myzcollection\test.php(37): c->c1()

#3 c:\program files\zend\zendstudio-5.2.0\bin\php5\dummy.php(1): include('d:\workspace\my...')

#4 end

第二個測試:

把b1裡面的throw $e去掉,就是不丟擲。

結果是:

x-powered-by: php/5.1.1

content-type: text/html

end第三個測試:

把b1裡面的throw new exception($e->getmessage());開啟。

丟擲乙個新的異常,這樣b1以上的呼叫都拿不到a1的異常了。

結果是:

x-powered-by: php/5.1.1

content-type: text/html

#0 d:\workspace\myzcollection\test.php(28): b->b1()

#1 d:\workspace\myzcollection\test.php(37): c->c1()

#2 c:\program files\zend\zendstudio-5.2.0\bin\php5\dummy.php(1): include('d:\workspace\my...')

#3 end

第四個測試:

把b1裡面的try catch throw都去掉。

結果:仍然輸出原來的異常,就是說中間的步驟不需要丟擲,最上層也能拿到最下層丟擲的異常。

只是有乙個問題,b中如果出先異常,就沒有辦法取到,如果需要也檢測b的話,那麼也要在b中加上try catch

x-powered-by: php/5.1.1

content-type: text/html

#0 d:\workspace\myzcollection\test.php(16): a->a1()

#1 d:\workspace\myzcollection\test.php(28): b->b1()

#2 d:\workspace\myzcollection\test.php(37): c->c1()

#3 c:\program files\zend\zendstudio-5.2.0\bin\php5\dummy.php(1): include('d:\workspace\my...')

#4 end

php Try Catch多層級異常測試

class a catch exception e class b catch exception e class c catch exception e try catch exception e echo end 頁面try catch裡使用c的 c1,c1裡使用b的b1,b1裡使用a的a1。預...

linux動態庫多層級呼叫

這是乙個小知識點,今天拿出來說說。我們有乙個應用test,它呼叫了乙個動態庫so1.so,而這個so1.so又呼叫了so2.so。so1.so的編譯命令列gcc o so2.so lso1 lrt lstdc test的編譯命令列gcc o test lso1 lrt lstdc 會報錯,說是在so...

多層級tree狀資料優化

1.先獲取第一級選單 2.準備遞迴的出口 3.遞迴呼叫 4.將獲取的子選單設定給父選單 param pid 一級選單 pid 0 return public list getallchildren long pid 遞迴函式 param pid return public list treedata...