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