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