2017-10-10 10 views
4

는 다음 코드 가정 : dependency::bar()이 예외를 발생하는 것으로 알려져있다예외는 언제 문서화해야합니까?

public function foo() 
{ 
    return $this->dependency->bar(); 
} 

경우,하지만 foo()는 그것을 처리 할 것으로 예상되지 않는다. foo()@throws 항목이 docblock에 있습니까? 아니면 암묵적이어야합니까? phpdoc 문서는 다소 모호합니다.

dependency이 인터페이스를 기반으로 주입된다고 가정하면; 인터페이스 문서는 예외를 throw 할 수 있습니다.

예외가 호출 코드에서 처리되어야하는지 또는 상황과 관련이없는 것이 중요합니까?

의미는 모든 방법 :

+1

다른 언어 (java)는 함수 본문에서 예외 (처리되지 않음)가 명시 적으로 정의되도록 필수입니다. 호출 스택에서 멀리 예외를 처리하면 정보가 더 이상 손상되지 않을 수 있습니다. (이 특별한 경우에는 foo가 예외를 처리하지 않고 foo는 호출자가 처리할지 여부를 알지 못하므로 foo에 따라주의해야합니다) – Gerard

+1

'$ this-> dependency -> bar()'는 문서의 호출자 및/또는 사용자가 알 수 없거나 알 수없는 내부 구현 세부 사항이며 예외를 문서화하는 것이 catch 가능하게 만드는 유일한 방법입니다. PhpStorm을 사용하는 경우 – deceze

+0

btw - IDE는 @throws 항목에 예외를 두도록 권장합니다. –

답변

2

당신은 (모든 사람이 사용할 수 있습니다) 예외를 던질 수있는 몇 가지 경우에 어떤 공공 기능을 만들었습니다 - 따라서 당신은 확실히 당신의 docblock에 @throws 항목이 있어야합니다.
예외가 종속성에서 벗어난 경우 - 내부 구현이고 캡슐화 됨 - 따라서 함수를 사용하는 누군가는 함수에서 기대하는 바가 전혀 없습니다.

인터페이스 삽입의 경우 - 인터페이스는 모든 예외를 설명해야합니다. 예외는 클래스 및 인터페이스의 동작의 일부이므로 모든 가능한 동작을 설명해야합니다.

try-catch 블록이 있고 종속성의 모든 예외를 처리하는 경우 - 자신의 예외 만이 해당 블록의 @throws 항목에 있어야합니다.

+0

설명을 위해 오류를 포착하고 다시 제기 하시겠습니까? – Timo

+0

@Timo 네, 그렇게 할 수 있고'@ throws' 블록에 예외를 설명해야합니다. –