
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