1--TEST--
2Lazy objects: serialize does not initializes object with __sleep method if flag is set
3--FILE--
4<?php
5
6class C {
7    public int $a;
8    public function __sleep() {
9        return ['a'];
10    }
11}
12
13function test(string $name, object $obj) {
14    printf("# %s:\n", $name);
15
16    $serialized = serialize($obj);
17    $unserialized = unserialize($serialized);
18    var_dump($serialized, $unserialized);
19}
20
21$reflector = new ReflectionClass(C::class);
22
23$obj = $reflector->newLazyGhost(function ($obj) {
24    var_dump("initializer");
25    $obj->a = 1;
26}, ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE);
27
28test('Ghost', $obj);
29
30$obj = $reflector->newLazyProxy(function ($obj) {
31    var_dump("initializer");
32    $obj->a = 1;
33}, ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE);
34
35test('Proxy', $obj);
36
37--EXPECTF--
38# Ghost:
39string(12) "O:1:"C":0:{}"
40object(C)#%d (0) {
41  ["a"]=>
42  uninitialized(int)
43}
44# Proxy:
45string(12) "O:1:"C":0:{}"
46object(C)#%d (0) {
47  ["a"]=>
48  uninitialized(int)
49}
50