2012-10-11 2 views
2

나는 이것이 큰 주제라는 것을 알았지 만, 특히 OO PHP에서 오류 처리에 대한 모범 사례 방법에 대한 약간의 거친 아이디어를 고맙게 생각합니다. (또한 언어를 능가하는 좋은 패턴에 관심이 있습니다 세부 사항). 이 클래스와 응용 프로그램이 대규모 클래스라고 가정 해 봅시다.PHP에서 오류 처리를위한 올바른 방법

또한 가장 권장되는 방법은 PHP 예외 모델을 사용하는 것임을 알고 있으며, 아래 예가 어떻게 변환되는지 알고 싶습니다.

편집 : 내가 무엇을 찾고 가장 폼 데이터 (메소드가 호출 된 방법으로하지 오류)라고 유효성을 검사 할 때 발생하는 오류를 말한다 처리하는 방법에 대한 아이디어, 아마도 예외 모델이 아니입니다 이 유스 케이스 끝 편집

특히 모든 오류를 즉시 표시/사용해야하는 경우 (동일한 방법으로 여러 예외를 적용 할 수 있습니까?) 일부는 기록해야 할 수도 있습니다 (다른 질문입니다)), 일부는 다른 종속성이 참 (또는 거짓)이고 일부는 경고 일 수도 있고, 일부는 중요 할 수도 있고 일부는 상태/통지 일 수도 있습니다. 정말 따라

답변

2

,

class ClassName() 
{ 
    public MethodName($data, &$errors) 
    { 
     $e = []; 

     // validate content and perform data handling 
     // any errors should be added to the array $e 

     if(empty($e)) { 
      return $processed_data; 
     } else { 
      $errors = $e; 
      return false; 
     } 
    } 
} 

// and then calling: 
$method_call = ClassName::MethodName($data, $errors); 

if($method_call) // do something with the data/display success message etc. 
else // decide what to do with any errors 

타르 밥상 :

내가 가지고 현재의 접근 방식의 라인을 따라 무언가이다. "적절한"방법은 예외를 사용하는 것입니다. 이미 다양한 유형의 예외가 내장되어 있으며 (http://www.php.net/manual/en/spl.exceptions.php 참조) 직접 정의 할 수 있습니다 (http://php.net/manual/en/language.exceptions.php 참조).

하려고 사용하는 코드를 호출에,이

function foo($bar) 
{ 
    if(!is_string($bar)) 
     throw new InvalidArgumentException("String argument expected"); 

    if(strlen($bar) > 50) 
     throw new LengthException("String argument is too long!"); 
} 

와 비슷한 수를 사용하는 방법/캐치, 예를 들어,

try { 
    foo("hjsdkfjhkvbnsjd"); 
} catch(LengthException $ex) { 
    // Trim the string 
} catch (InvalidArgumentException $ex) { 
    // Try to recover. Cast or trim or something 
} catch (Exception $ex) { 
    // We hit an exception we're not explicitly handling. 
    // Gracefully exit 
    die($ex->Message); 
} 

실제로 어떤 메소드가 실제로 잘못 호출되었거나 치명적인 방법으로 실패한 경우에만 예외를 발생시켜야합니다.

+0

좋아, 마지막 코멘트에 관해서는 아마도 내 질문을 리팩토링해야한다고 생각합니다. 왜냐하면 내가 찾고있는 것은 어떻게 처리해야하는지에 대한 아이디어가 유효성을 검사 할 때 양식 데이터 (메서드가 호출 된 방법의 오류가 아님)를 말할 때 생성되는 오류라고 말합니다.이 경우 – kalpaitch

+1

비슷한 일을 할 수 있습니다. 오류 요소에 대한 필드를 포함하도록 Exception을 확장 한 다음 유효성 검사가 완료되고 실패한 후에 오류 요소를 버립니다. – slugonamission

관련 문제