개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.16 15:49

Throwable::__toString() 메서드 이해를 도와주세요

목록
  • 리팩토링광 6일 전 2025.07.16 15:49
  • 41
    1
나는 Exception 클래스를 상속받은 CustomException 클래스를 만들었는데, 이 클래스에서 __toString() 메서드를 오버라이딩하여 사용자 정의 메시지를 출력하려고 합니다. 그러나 Throwable::__toString() 메서드는 어떻게 동작하고, CustomException 클래스에서 __toString() 메서드를 정의했음에도 불구하고 Exception 클래스의 메시지가 출력되는 이유를 모르겠습니다. __toString() 메서드가 어떻게 호출되는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  6일 전



    Throwable::__toString() 메서드는 Throwable 클래스에서 정의된 메서드입니다. 이 메서드는 예외 객체의 정보를 문자열로 반환합니다.

    CustomException 클래스에서 __toString() 메서드를 오버라이딩하여 사용자 정의 메시지를 출력하려고 합니다. 그러나 Exception 클래스의 메시지가 출력되는 이유는 다음과 같습니다.

    1. PHP는 상속 관계에서 부모 클래스의 메서드를 호출하기 전에 자식 클래스의 메서드를 호출합니다. 그러나 Throwable::__toString() 메서드는 Exception 클래스의 메서드이기 때문에 Exception 클래스의 메서드가 호출됩니다.

    2. CustomException 클래스에서 __toString() 메서드를 정의했음에도 불구하고 Exception 클래스의 메시지가 출력되는 이유는 PHP가 Exception 클래스의 메서드를 호출하기 전에 CustomException 클래스의 메서드를 호출하지 않기 때문입니다.

    3. PHP는 Throwable::__toString() 메서드를 호출할 때 Exception 클래스의 메서드를 호출합니다. CustomException 클래스에서 __toString() 메서드를 정의했더라도 PHP는 Exception 클래스의 메서드를 호출하기 때문에 CustomException 클래스의 메서드가 호출되지 않습니다.

    __toString() 메서드가 어떻게 호출되는지 알려드리겠습니다.

    1. 예외가 발생하면 PHP는 Exception 클래스의 생성자를 호출합니다.

    2. Exception 클래스의 생성자는 Throwable::__toString() 메서드를 호출합니다.

    3. Throwable::__toString() 메서드는 Exception 클래스의 메서드를 호출합니다.

    4. Exception 클래스의 메서드는 예외 객체의 정보를 문자열로 반환합니다.

    5. 반환된 문자열은 예외를 처리하는 코드에 출력됩니다.

    예를 들어, CustomException 클래스를 다음과 같이 정의할 수 있습니다.

    #hostingforum.kr
    php
    
    class CustomException extends Exception {
    
        public function __toString() {
    
            return "CustomException: 사용자 정의 메시지";
    
        }
    
    }
    
    


    이 클래스에서 __toString() 메서드를 오버라이딩하여 사용자 정의 메시지를 출력하려고 합니다. 그러나 Exception 클래스의 메시지가 출력되는 이유는 PHP가 Exception 클래스의 메서드를 호출하기 때문에 CustomException 클래스의 메서드가 호출되지 않기 때문입니다.

    따라서, CustomException 클래스에서 __toString() 메서드를 오버라이딩하여 사용자 정의 메시지를 출력하려면 Throwable::__toString() 메서드를 오버라이딩하여 CustomException 클래스의 메서드를 호출해야 합니다.

    #hostingforum.kr
    php
    
    class CustomException extends Exception {
    
        public function __toString() {
    
            return "CustomException: 사용자 정의 메시지";
    
        }
    
    
    
        public static function __toString() {
    
            return "CustomException: 사용자 정의 메시지";
    
        }
    
    }
    
    


    이렇게 하면 CustomException 클래스의 메서드가 호출되어 사용자 정의 메시지가 출력됩니다.

    2025-07-16 15:50

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 38,130건 / 47 페이지

검색

게시물 검색