
GMP 라이브러리에서 __serialize 메서드를 사용하여 객체를 serialize 할 때, 전역 변수를 serialize 할 때 문제가 발생하는 이유는 serialize 함수가 전역 변수를 serialize 할 때, 전역 변수의 현재 값만 serialize 한다는 것입니다.
예를 들어, 전역 변수 $a를 선언하고 serialize 한 후, deserialize 할 때 전역 변수 $a가 제대로 동작하는지 확인하고 싶습니다.
#hostingforum.kr
php
$a = '전역 변수';
class Test {
public function __serialize() {
return array('전역 변수' => $GLOBALS['a']);
}
public function __unserialize(array $data) {
$this->전역변수 = $data['전역 변수'];
}
}
$obj = new Test();
$serialized = serialize($obj);
$obj2 = unserialize($serialized);
echo $obj2->전역변수; // 전역 변수가 제대로 동작하는지 확인
위 코드에서 전역 변수 $a는 serialize 할 때, 현재 값인 '전역 변수'만 serialize 됩니다. deserialize 할 때, 전역 변수 $a는 이전 값인 '전역 변수'가 아닌 현재 값인 '전역 변수'로 동작합니다.
따라서, GMP 라이브러리에서 __serialize 메서드를 사용하여 객체를 serialize 할 때, 전역 변수를 serialize 할 때 문제가 발생하는 이유는 serialize 함수가 전역 변수의 현재 값만 serialize 한다는 것입니다.
이 문제를 해결하기 위해서는, serialize 할 때 전역 변수의 값을 저장하고, deserialize 할 때 저장된 값을 사용하는 방법이 있습니다.
#hostingforum.kr
php
$a = '전역 변수';
class Test {
public $전역변수;
public function __serialize() {
return array('전역 변수' => $this->전역변수);
}
public function __unserialize(array $data) {
$this->전역변수 = $data['전역 변수'];
}
}
$obj = new Test();
$obj->전역변수 = $GLOBALS['a'];
$serialized = serialize($obj);
$obj2 = unserialize($serialized);
echo $obj2->전역변수; // 전역 변수가 제대로 동작하는지 확인
위 코드에서, serialize 할 때 전역 변수의 값을 저장하고, deserialize 할 때 저장된 값을 사용합니다. 따라서, 전역 변수 $a는 제대로 동작합니다.
2025-07-02 06:15