2012-08-10 5 views
3

클래스가 존재하지 않는 경우 어떤 PHP SPL Exception을 던져야합니까? ZF2 coding standards for exceptions의 컨텍스트 내에서클래스가 존재하지 않는 경우 어떤 PHP SPL 예외를 throw해야합니까?

표준에서는 예외가 PHP's SPL Exceptions 중 하나에서 확장되어야한다고 말합니다. 내 첫 번째 추측은 일종의 RuntimeException 것입니다.

PHP SPL Exceptions

+0

IMO 그것이'InvalidArgumentException' 될 것이다 사용해야합니다 (그것은 잘못된 클래스를 지정합니다 이름). 비록 내가 확신 할 수는 없지만, 문서는 잘못된 * type *의 인수로 사용되어야 함을 나타내는 것 같습니다. – DaveRandom

+0

동의합니다. 자동 로더에서 잘못된 인수가 될 수 있습니다. class_exists()를 사용하여 클래스 이름을 검사 한 후에 예외를 던지면 어떨까요? – gawpertron

+0

@ gawpertron 클래스가 존재하지 않으면 인수로 전달하는 class_exists ("MyClass")'를 실행하고, 그렇지 않으면'InvalidArgument'를 던집니다. 그렇지 않으면'RuntimeException' 던졌습니다. – Gntem

답변

2

응용 프로그램의 컨텍스트에 따라 다릅니다.

메서드 인수로 클래스 이름을 받고 동일한 메서드에서 해당 클래스를로드하려고하면 InvalidArgumentException 예외를 사용해야합니다. 당신은 필드 값이나 방법에서 클래스 이름을받는 경우

다음 자동 로더에 전달 된 인수가 유효하지 않기 때문에 RuntimeException을가

-1

자동로드는 PHP가 RuntimeException의 권리를 밖으로 뱉어 것이다 존재하지 않은 경우? 따라서 클래스를 찾지 못하면 로더가 동일한 작업을 수행해야합니다. ZF2 코딩 표준에 따르면, 로더의 예외 네임 스페이스 내에있는 RunTimeException을 던져야합니다.

로더가 My \ Loader에 있으면 런타임 예외가 My \ Loader \ Exception \ RunTimeException이됩니다.

+1

PSR-4는이 답변의 반대라고 말합니다. [ "Autoloader 구현은 예외를 throw해서는 안되며, 모든 레벨의 오류를 발생시키지 않아야하며, 값을 반환해서는 안됩니다."] (http://www.php-fig.org/psr/psr-4/) 응용 프로그램이 예외를 throw 할 수는 없지만 응용 프로그램의 자동 로더는 절대로 안됩니다. –

+0

나는 PSR 팬이기 때문에 세스가 말한 바있다. –

관련 문제