1--TEST-- 2Referencing an uninitialized typed property in __sleep() should be skipped 3--FILE-- 4<?php 5 6class Test { 7 public int $x; 8 protected int $y; 9 private int $z; 10 11 public function __sleep() { 12 return ['x', 'y', 'z']; 13 } 14 15 public function __set($name, $val) { 16 $this->$name = $val; 17 } 18} 19 20$t = new Test; 21var_dump(serialize($t)); 22var_dump(unserialize(serialize($t)) == $t); 23 24$t->x = 1; 25var_dump(unserialize(serialize($t)) == $t); 26 27$t->y = 2; 28var_dump(unserialize(serialize($t)) == $t); 29 30$t->z = 3; 31var_dump(unserialize(serialize($t)) == $t); 32 33var_dump($t); 34?> 35--EXPECT-- 36string(15) "O:4:"Test":0:{}" 37bool(true) 38bool(true) 39bool(true) 40bool(true) 41object(Test)#1 (3) { 42 ["x"]=> 43 int(1) 44 ["y":protected]=> 45 int(2) 46 ["z":"Test":private]=> 47 int(3) 48} 49