생성자에서 예외를 던져야합니까?


46

PHP에서 생성자에서 예외를 던질 수 있다는 것을 알고 있지만 어떻게해야합니까? 예를 들어 매개 변수의 값이 예상과 다른 경우

또는 메소드가 호출 될 때까지 예외 발생을 연기해야합니까? 두 경우 모두 장점과 단점은 무엇입니까?


문제는 사용자에게 못생긴 예외 오류 메시지가 표시되도록하려는 것입니까?

15
@LawrenceCherone 아니오, 그건 질문이 아닙니다. 전혀. 문제는 ctor가 전달 된 인수에서 객체를 유효한 상태로 설정할 수없는 경우 즉시 예외를 발생시킬 수 있는지 또는 가능한 유효하지 않은 상태의 해당 인스턴스에서 작동하는 메소드가 호출 될 때까지 지연시키는 지 여부입니다. 그래도 프로그래머에게 더 적합합니다.

4
@LawrenceCherone 당신이 맞아요. 어떤 소프트웨어도 고의로 실패해서는 안됩니다. 계속 진행하여 어떤 일이 발생하는지 확인해야합니다. / s
user253751

@immibis 좋은 풍자가 좋습니다.
kodeart

이것은 멋진 질문입니다 !!! 나는 오늘까지이 아이디어를 고려한 적이 없습니다.
Rhys Johns

답변:


75

예외를 던지는 이유는 무엇입니까?

주어진 매개 변수로 객체를 제대로 인스턴스화 할 수 없다는 것을 알고 있다면 예외를 분명히 던져야합니다.

그렇지 않으면 누군가 객체를 null로 테스트하여 그렇지 않을 수 있으며 모든 것이 예상대로 진행되었다고 가정 할 수 있습니다.

메소드를 호출하지 않고 오브젝트에 수행 할 수있는 많은 것들이 있습니다 :리스트에 추가 될 수 있고, 비교 될 수 있고, 매개 변수로 전송 될 수 있습니다. 그것이 유효한 객체가 아니라는 것을 고려하면 발생하지 않아야합니다.


21

생성자가 잘못된 매개 변수로 호출되면 예외를 던져야합니다. 그렇지 않으면 예상대로 작동하지 않는 나쁜 개체가 생길 수 있습니다.


17

물론!!

오브젝트 구성을위한 매개 변수가 유효하지 않거나 계약에 따라 유효하지 않은 경우 예외를 처리해야합니다. 개체가 나쁜 데이터로 구성되어 호출자가 계속 진행하도록 허용 하면 많은 문제 가 발생할 수 있다는 점을 알고 흐름을 진행하는 것은 좋지 않습니다 .

"빠르고 빠르다" 는 것이 좋습니다.


7

PHP에서 생성자에서 예외를 던질 수 있다는 것을 알고 있지만 어떻게해야합니까?

이것이 객체 생성이 실패했음을 알리는 유일한 방법입니다.


2

객체를 인스턴스화하기 전에 매개 변수 세트의 유효성을 검사하지 않는 이유는 무엇입니까? 그렇게하면 객체가 생성되므로 장애로 인해 발생할 수있는 부작용을 제거 할 수 있습니다.

생성자에서 항목을 확인하고 예외를 던질 수 있다는 것을 알고 있지만 실패하지 않는 방식으로 생성자를 작성하는 것을 선호합니다. 객체를 인스턴스화하기 전에 매개 변수 유효성 검사를 수행하여 생성자가 실패하지 않고 예외를 던질 수 있습니다. 또한 일반적으로 생성자에서 새 객체를 인스턴스화하려고 시도하지 않고 필요에 따라 인스턴스화하도록 선택합니다.

그냥 내 의견. PHP는 많은 자유를 제공합니다-즐기십시오!


이 답변이 왜 다운되었는지 확실하지 않습니다. 특정 (일반적으로 비즈니스) 규칙에 대한 클래스 / 함수를 디자인하는 좋은 방법 인 객체 구성 ( "guard"방법 ) 전에 매개 변수 유효성 검사를 사용하여 유효한 접근 방식을 제공합니다 . OP의 질문에 직접 대답하지 않아도 여전히 좋은 조언입니다. :)
kodeart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.