2013-10-05 53 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; 
    }