2011-03-17 5 views
0

추가 유효성 검사 단계를 수행하는 dateTime에 대한 확장 클래스가 있습니다.
주어진 날짜가 유효하지 않은 경우 예외가 발생합니다.
이제 날짜가 영 (0000-00-00 00:00:00) 인 MySQL 레코드가 있습니다. 이러한 경우,멋지게 예외를 catch하십시오.

try 
    { 
     $sellDate = new Date(); 
     $sellDate ->setFromMySQL($this->_data['lastSell']); 
     $sellDateDMY = $dateSell->getDMY(TRUE); 
    } 
    catch (Exception $e) 
    { 
     if($e->getMessage() == 'Invalid date.') 
      $sellDateDMY = 'Never'; 
     else 
      throw new Exception($e->getMessage()); 
    } 
    $info[] = array('desc' => 'Last Sell: '  , 'data' => $sellDateDMY); 

더 좋은 방법은이 일을 ... 나는이 끔찍한 엉망이 지금은 "결코"텍스트를 보여주고 싶은, 그래서 나는 예외를 catch해야하고,?

+0

할 수 있습니다 단지'던져 $ 전자,'필요'또 다른'예외 new' ($ 전자 ->의 getMessage())'. –

답변

2

throw하는 메소드에 따라 다릅니다. 가장 간단한 방법은 Date (아마도 NullableDate?)을 다시 서브 클래 싱 (subclass)하고 그 메소드를 오버라이드 (override)하여 오버 플로우 (override)하는 것입니다. getDMY 메서드는 null을 반환합니다.이 시점에서 ?:을 사용하여 Never을 표시 할 수 있습니다.

당신은 추한 try/catch를 사용할 필요가 없습니다 이런 식으로, 또한 검증 요구 사항에 정보를 원하시면 그것을 읽는 사람에 대하여 명확하게 알 수있을 것이다 코드의 의도 - 인스턴스화하여 NullableDate 당신은 확실히하지 않습니다 그 값이 비어 있다면 마음을 기울이십시오.

+0

현명한 해결책처럼 보이지만, 나는 발에서 자신을 쏘고 있다고 생각하기 시작했다 ... : - / –

0
class DateException extends Exception { 
    public function __construct(Exception $e) { 
    if($e->getMessage() == 'Invalid date.') { 
     $this->message = 'Never'; 
    } else { 
     $this->message = $e->getMessage(); 
    } 
    } 
} 

try 
{ 
    $sellDate = new Date(); 
    $sellDate ->setFromMySQL($this->_data['lastSell']); 
    $sellDateDMY = $dateSell->getDMY(TRUE); 
} 
catch (Exception $e) 
{ 
    throw new DateException($e); 
} 
0

당신은 예외의 다른 유형을 던지기 시작할 수 있습니다. 문제와 관련이 있습니다. 대신 일반 캐치, 당신은이

catch (DateInvalidException $de) { 
    //code 
} catch (DateSomeOtherException $dso) { 
//code 
} catch (Exception $e) { 
    //general 
} 

을 할 수 그러나 그것은 좋은 해결책이 아니다. 프로그램 예외 및 오류 확인이 섞여 있습니다.

0

날짜 기능에 대한 고유 한 Exception 클래스를 만듭니다.

class MyOwnDateException extends Exception { 
    ... // Do something or probably nothing 
} 

그리고 당신의 코드에서 호출

try { 
    if($someErrorYouWantToCatch) { 
     throw new MyOwnDateException("error message", 100 /* Error code = optional */); 
    } 
} catch(MyOwnDateException $mode) { 
    $sellDateDMY = 'Never'; 
} 
관련 문제