2013-10-05 82 views
3
try{ 
    class MyException extends Exception{} 
    try{ 
     throw new MyException; 
    }catch(Exception $e){ 
    echo "1:"; 
    throw $e; 
    }catch(MyException $e){ 
    echo "2:"; 
    throw $e; 
    } 
}catch(Exception $e){ 
echo get_class($e); 
} 

我很困惑這個嘗試和捕獲。我期待2:MyException結果,因爲第二次嘗試拋出MyException,但實際結果是1:MyException所以請任何人都可以向我解釋。謝謝在php中嵌套嘗試捕獲

+1

您應該使用主Exception作爲最後一個選項。所以交換第一個和第二個catch塊。 –

回答

3

第一個catch-block捕獲'Exception'類的所有內容。由於MyException擴展了Exception-class,所以MyException被捕獲到了第一個catch塊中。

6

MyException延伸Exception,因此ExceptonMyException更通用,並且第一個catch塊會捕獲它。如果你想趕上MyException你需要牛逼rverse的catch塊的順序:

class MyException extends Exception{} 

try{ 
try{ 
    throw new MyException; 
}catch(MyException $e){ 
    echo "2:"; 
    throw $e; 
}catch(Exception $e){ 
    echo "1:"; 
    throw $e; 
} 
}catch(Exception $e){ 
echo get_class($e); 
} 
0

這將是更好,如果你檢查類名,並相應地處理它。

 

class MyException extends Exception{} 




    try{ 
     throw new MyException; 
    } 
    catch (Exception $ex){ 
     switch (get_class ($ex)){ 
      case "MyException" : 
       // do whatever you want to do for MyException 
       break; 
      default: 
       // do whatever you want to do for Exception 
       break; 
     } 
     throw $ex; 
    }