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

나는이 시도와 혼동 스럽다. 두 번째 시도가 MyException을 던지기 때문에 2:MyException 결과가 나올 것으로 예상되지만 실제 결과는 1:MyException입니다. 아무에게도 설명해주세요. 감사합니다PHP에서 중첩 된 try catch

+1

마지막 예외로 주 예외를 사용해야합니다. 따라서 첫 번째 및 두 번째 catch 블록을 교체하십시오. –

답변

3

첫 번째 catch 블록은 'Exception'클래스의 모든 것을 포착합니다. MyException는 Exception 클래스를 상속하므로이 첫 번째 catch 블록에서 MyException이 발견됩니다.

6

MyExceptionException 연장되므로 ExceptonMyException는보다 일반적이며, 상기 제 catch 블록을 잡을 것이다. 당신이 MyException를 잡을하려는 경우 당신은 t이 catch 블록의 순서를 rverse 필요 : 당신은 클래스 이름을 확인하고 적절하게 처리 할 경우

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; 
    }