2012-01-17 3 views
2

PHP 함수가 실패 할 경우를 대비하여 무엇을 반환할지에 대한 많은 스레드가 있습니다. 하지만 그들은 모두 PHP 4에 관한 것이 었습니다.반환 유형 일관성이 php5

이제 가장 최근의 (PHP 5) 프로젝트에서 반환 유형에 대해 일관성을 유지하고 싶습니다. (필자는 모르겠다. 도로). 따라서 메서드의 정상적인 반환 형식이 배열 인 경우 메서드가 실패 할 경우를 대비하여 반환해야하는 것은 무엇입니까?

  • 빈 I가 null 반환 C#에서 예외 대신

을 던져

  • 배열(), 그렇게해야 내가 PHP 끊임없이 내가 강력하게 형식화 된 언어로 무엇을 할 것이라고 생각 쓰기 ? 또는이 특정 시나리오에서 뭔가가 더 적합합니까? 각 옵션에 대한 장단점은 무엇입니까?

  • 답변

    1

    내가 복구 할 수없는 오류에 예외를 슬로우, 슬로우 및 예외 실패 할 경우.

    예를 들어 getById ($ id)와 같은 메소드가 있다고 가정 해 보겠습니다. 아무것도 발견되지 않았던 경우는 null를 돌려주는 것은 괜찮습니다. 이제 getById ($ id)를 호출하는 다른 메소드 delete ($ id)가 있다고 가정 해 보겠습니다. 이 경우, 아무것도 발견되지 않는 경우 (즉, getById가 null를 돌려주는 경우), 예외가 발생됩니다.

    반환 값이 null, 빈 배열 또는 문자열 또는 정수인 오류를보고 할 때마다이 오류를 처리해야하며 반환 값에 따라 다른 정리를 수행해야합니다. 이것은 관련된 모든 메소드/함수에서 어떤 것을 더럽힐 수 있습니다.

    예외를 사용하면 이러한 오류를 한 곳 (캐치)에서만 처리하고 catch 할 수 있습니다. 따라서 오류를 검사하는 코드를 복제 할 필요가 없습니다 (반환 값은 빈 배열입니까? 1, 2 또는 9 등의 반환 값입니까?). 게다가 예외를 사용하면 소스를 따라 많은 if를 작성하지 않고도 (비즈니스 로직 예외 또는 유효하지 않은 인수와 같은) 종류의 오류를 쉽게 "카탈로그"할 수 있습니다.

    함수/메소드가 뭔가를 반환하면 (정상적으로 종료 된 경우) 반환 값은 사용할 수있는 값입니다 (빈 배열, null 또는 빈 문자열은 모두 유효한 반환 값입니다). 함수/메소드가 예외를 던지면 분명히 잘못된 것이 있습니다.

    또 다른 중요한 점은 엄격한 검사 (=== 대 ==)를 사용하지 않으면 null이 false, 0 및 빈 문자열과 같을 수 있으므로 다른 종류의 버그가 발생할 수 있습니다. 이것은 예외가 장점이 될 수있는 곳입니다.

    물론 당신이 무엇을 결정하든 중요한 것은 코드에 따른 선택과 일치하는 것입니다.

    3

    메서드의 논리를 수행하는 데 오류가없는 경우 (예외를 throw하는 것이 좋습니다) 빈 배열을 반환한다고 말합니다. null을 반환

    foreach($obj->method() as $item) 
    { 
        // ... 
    } 
    

    YourClass::method() 경우에, 나는 하늘의 배열을 반환하면 해당 트리거하지 않을 것, 반면, 경고를 "잘못된 인수가 제공"얻을 것입니다 : 그것은 다루는이 같은 상황이 쉽게 만들 것입니다.

    무엇을 선택하든간에 과 붙어 있습니다. 아무도 반환 값이 일관되지 않고 논리적 인 의미가없는 API로 작업하는 것을 좋아하지 않습니다.

    1

    함수가 실제로 '실패'하면 예외가 발생합니다. 예외는 실패를 나타 내기위한 것입니다.

    여전히 어떤 점에서는 예외를 어떻게 처리할지 결정해야하며 빈 배열을 반환하는 것이 가장 좋을지 결정하는 것이 좋습니다. 예를 들어 기존의 foreach() 루프를 계속 사용하려는 경우 유용합니다.

    따라서 예외를 사용하지만 어디에서 잡아서 사용자에게 유용한 것으로 처리할지 생각해보십시오.

    1

    이 방법이 실패하면 IMO 예외로 분류해야합니다. 그러면 예상 된 외출을 적절하게 파악하고 그에 따라 행동 할 수 있습니다.

    저는 함수와 메소드의 응답을 정규화하는 것을 매우 신봉합니다. 함수가 반환 할 내용을 알면 삶이 훨씬 쉬워집니다. 한마디로

    는 그것이 배열이 반환됩니다 확인하지 않는 경우 내 $ 0.02