2014-02-22 24 views
0

我有這樣的代碼:雖然我有這個類的構造,但爲什麼會拋出'Caught Exceptionn'而不是'Caught MyExceptionn'?

class MyException extends Exception {} 

function __construct($palabra){ 
echo 'hola.adios'; 
} 

try { 
throw new MyException('Oops!'); 
}catch (Exception $e) { 
echo "Caught Exceptionn"; 
}catch (MyException $e) { 
echo "Caught MyExceptionn"; 
} 

,當我在資源管理器,輸出「中招Exceptionn」,而不是「夾縫MyExceptionn」運行它雖然是一個新的MyException和thouhg我構建這個類!

回答

0

您的第一個catchblock引用Exception,它是MyException的父類。這意味着如果你有catch(Exception),它也會處理所有的MyException和所有的Exception類。

反向您以解決您的問題(即使它從最具體運行最通用的。):

class MyException extends Exception {} 

function __construct($palabra){ 
echo 'hola.adios'; 
} 

try { 
throw new MyException('Oops!'); 
}catch (MyException $e) { 
    echo "Caught MyExceptionn"; 
}catch (Exception $e) { 
    echo "Caught Exceptionn"; 
} 
0

您應該鏈的catch塊從最具體到最少。因此,基本上,它應該看起來像

class MyException extends Exception {} 

function __construct($palabra){ 
    echo 'hola.adios'; 
} 

try { 
    throw new MyException('Oops!'); 
} catch (MyException $e) { 
    echo "Caught MyException"; 
} catch (Exception $e) { 
    echo "Caught Exception"; 
} 

如果異常的類型是MyException的,這將是第一catchcatch版,如果不是,它會在更普遍的被抓Exceptioncatch塊。

相關問題