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