2011-04-05 1 views
2

이것은 매우 간단한 질문이며, 나를 귀찮게하는 자신의 newb 상태입니다. 사과.Try-Catch는 사용자 정의 예외 유형을 catch하지 않습니다.

왜이 코드가 작동하지 않습니까?

if ((!substr_count($response, "200 Account created successfully") > 0)) // If failed 
{ 
    if ((substr_count($response, "400 EmailAddressInUse") > 0)) // If email address already in use 
     { 
      throw new emailInUseException($response); 
     } 
     throw new exception("Error: Could not create account. Reason: $response"); 
} 

emailInUse 캐치 :(작동하지 않는 것 create_account 함수 내에서

try 
    { 
     create_account($accountXML); 
     echo "<p>Successfully created your account.</p>"; 
     try 
     { 
      create_page($pageXML,$base64_credentials); 
      echo "<p>Successfully created your page!</p>"; 
     } 
     catch (exception $e){ echo "<p>$e</p>"; } 
    } 
    catch(exception $e) 
    { 
     echo "<p>$e</p>";   
    } 
    catch(emailInUseException $e) 
    { 
     echo "<p>Error: Email already in use. Could not create account.</p>"; 
    } 

...

업데이트 : 디버깅 나는 다음과 같은 오류가 활성화 : Fatal error: Class 'emailInUseException' not found

정말 끔찍한 일입니다. 감사합니다. 어떤 도움.

+0

무엇이'emailInUse' 함수에 있습니까? – Neal

+1

@Neal :'emailInUse'는 커스텀 예외 타입으로 보입니다. 아마 더 나은'EmailInUseException'라는 이름이지만 누가 판단 할 사람이 있을까요? – AgentConundrum

+0

@Agent 나는 그것을 할 것이다! –

답변

8
catch(emailInUse $e) 
    { 
     echo "<p>Error: Email already in use. Could not create account.</p>"; 
    } 
    catch(exception $e) 
    { 
     echo "<p>$e</p>";   
    } 

주문을 변경해야합니다. 좀 더 일반적인 예외가 바닥에 올 필요가 있습니다. 그렇지 않으면 특정 예외가 잡히기 전에 코드가이를 catch하고 throw합니다.

+0

주위를 바꾸었지만 여전히 작동하지 않았습니다. Bah :( –

+2

흠, 일반 잡기에서 잡히는 예외 유형을 확인하십시오. 실제로 클래스 유형과 일치하는지 확인하십시오. 전혀 잡히지 않습니까? – JohnP

+0

@Django : JohnP이 말한 것을 반복하십시오. create_account' 함수는 * 두 가지 유형의 예외를 던집니다. 따라서 보통 '예외'유형이 아닌'emailInUse'를 실제로 잡았는지 확인하십시오. – AgentConundrum

관련 문제