1--TEST-- 2Lazy objects: Foreach initializes object 3--FILE-- 4<?php 5 6class C { 7 public int $a; 8 public function __construct() { 9 var_dump(__METHOD__); 10 $this->a = 1; 11 } 12} 13 14$reflector = new ReflectionClass(C::class); 15 16print "# Ghost:\n"; 17 18$obj = $reflector->newLazyGhost(function ($obj) { 19 var_dump("initializer"); 20 $obj->__construct(); 21}); 22 23foreach ($obj as $prop => $value) { 24 var_dump($prop, $value); 25} 26 27print "# Proxy:\n"; 28 29$obj = $reflector->newLazyProxy(function ($obj) { 30 var_dump("initializer"); 31 return new C(); 32}); 33 34foreach ($obj as $prop => $value) { 35 var_dump($prop, $value); 36} 37 38--EXPECTF-- 39# Ghost: 40string(11) "initializer" 41string(14) "C::__construct" 42string(1) "a" 43int(1) 44# Proxy: 45string(11) "initializer" 46string(14) "C::__construct" 47string(1) "a" 48int(1) 49