
DateTime::__wakeup() 메서드는 객체를 unserialize() 할 때 호출됩니다. 이 메서드의 역할은 객체의 속성을 초기화하고, 시간 정보를 재설정하는 것입니다.
객체를 serialize() 한 후 unserialize() 할 때 __wakeup() 메서드가 호출되는지 확인하려면 다음 코드를 사용할 수 있습니다.
#hostingforum.kr
php
$date = new DateTime('2022-01-01 12:00:00');
// 객체를 serialize
$serialized = serialize($date);
// 객체를 unserialize
$unserialized = unserialize($serialized);
// __wakeup() 메서드가 호출되었는지 확인
var_dump($unserialized instanceof DateTime); // bool(true)
// __wakeup() 메서드의 기본 동작
// 객체의 속성이 초기화되고, 시간 정보가 재설정됩니다.
// 사용자가 직접 __wakeup() 메서드를 오버라이딩하는 예시
class CustomDateTime extends DateTime {
public function __wakeup() {
parent::__wakeup();
// 사용자 정의 로직
$this->setTimezone(new DateTimeZone('Asia/Seoul'));
}
}
$customDate = new CustomDateTime('2022-01-01 12:00:00');
$serialized = serialize($customDate);
$unserialized = unserialize($serialized);
// __wakeup() 메서드가 호출되었는지 확인
var_dump($unserialized instanceof CustomDateTime); // bool(true)
// __wakeup() 메서드의 사용자 정의 로직이 수행된 후
// 시간 정보가 재설정된 후
// 이 메서드가 호출되는 시점에서 DateTime 객체의 상태
// 객체의 속성이 초기화되고, 시간 정보가 재설정됩니다.
// 만약 사용자가 직접 __wakeup() 메서드를 오버라이딩하면
// 사용자 정의 로직이 수행되고, 시간 정보가 재설정됩니다.
2025-05-04 12:10