2009-11-28 8 views
1

특수 PHP 응용 프로그램 용 컬렉션 클래스를 개발 중입니다. 그 안에는 map, each 등의 함수가 있습니다.예외의 적절한 사용?

잘못된 인수로 일부 함수를 호출하는 것에 대한 토론이있었습니다. 예를 들어 :

public function each($fn) { 
    // ... 
} 

// ... 

$collection->each('not a function'); 

each에 대한 호출이 예외를 발생할까요? null을 반환해야합니까? 우리는 잘못된 인수를 무시하고 존재하지 않는 함수를 호출하려고 시도 할 때 런타임 오류를 발생시켜야합니까? 이 사건을 어떻게 처리해야할지 모르겠습니다.

+0

중복 : http://stackoverflow.com/questions/77127/when-to-throw-an-exception – LiraNuna

+1

@LiraNuna, 중복되지 않습니다. 그 질문은 사용자 입력 검증을 다룬다. 이것은 코더 입력 검증을 다룬다. – strager

+0

그들은 여전히 ​​동일합니다. 프로그래머가 잘못된 입력을 동적 언어로 제공 할 것으로 기대합니다. – LiraNuna

답변

3

예외는 예외적 인 상황이며 나쁜 코더는 예외입니다.

대신 어설 션을 사용하십시오. 이 외부 사용을위한 라이브러리의 경우 http://php.net/manual/en/function.assert.php

를 참조 후, 노출 된 메소드에 예외가 일반적으로 이해, (예를 들어, InvalidArgumentException) 할 수 있지만, 주장은 코드가 필요한 조건을 충족 내부적으로 검증하기위한 더 적합합니다.

아마도 또 다른 예 인해 다운 된 서버에 예외의 좋은 사용이 파일 액세스를하고있는 몇 가지 가능성이 존재하는 한 자원에 액세스 할 수 없습니다 있다는 것을 명확히 도움이 될 것 등

참조 Design by contract using assertions or exceptions?

+0

design-by-contract-tested-by-assert-by-exception은 잘못된 매개 변수를보고하기 위해 예외를 사용합니다. 특히 메소드 호출이 HTML 양식 입력과 매우 흡사 한 인터페이스 방식의 의미에서 그렇습니다. 확인해 봐, 그렇지? – Don

+0

잘못된 html 양식 입력은 실제로 예외는 아니지만 오히려 예상됩니다. 'if'로 처리하고 계속 진행하십시오. 예외는 흐름 제어가 아닙니다. –