다음은 현재 작성중인 클래스의 일부로, 직렬화를 처리해야합니다. serialize 함수가 제대로 작동하고 적절한 문자열이 생성됩니다. 문제는 deserialize ($ data) 함수에 있습니다. deserialize 함수에서 올바른 serialize 된 문자열이 unserialize로 전달됩니다. $ scl 개체에 예상되는 데이터가 없습니다. 통지 또는 오류가 발생하지 않습니다. 결과적으로 $ scl-> printData()는 클래스 변수의 내용이 아닌 정보를 인쇄합니다. 앞으로 unserialize의 결과를 $ this에 할당하고 싶습니다. 내가 뭘 놓치고 있니?오류는 발생하지 않지만 PHP의 직렬화를 성공하지 못합니다.
public function serialize() {
$serial = serialize($this);
$df = gzdeflate($serial);
$b64 = base64_encode($df);
$ue = urlencode($b64);
return($ue);
}
public function deserialize($data) {
$u64 = base64_decode($data);
$gf = gzinflate($u64);
$scl = unserialize($gf);
if(!$scl)
echo"Cannot unserialize<br>";
$scl->printData();
}
function __sleep() {
return($this);
}
function __wakeup() {
echo"Waking up";
}
public function printData() {
echo"Data: <br>
ID: {$this->ID} <br>
sID: {$this->sID}<br>
...
";
}
잘 작동했습니다. unserialize 결과를 $ this에 할당 할 수 없었습니다. 지금은 불가능합니다. – jallmer
@jallmer, correct,'$ this'에 * anything *을 직접 할당 할 수없고, 속성에만 할당 할 수 있습니다. 또한 중요한 보안 문제에 대한 최종 질문을 추가했습니다. – Charles
고맙습니다. 문제를 해결 한 '복사 생성자'와 같은 것을 만들었습니다. 이제는 보안 문제를 다룰 것입니다. – jallmer