1--TEST--
2foreach() must return properly typed references
3--FILE--
4<?php
5class Foo {
6    public int $bar = 0;
7    public float $baz = 0.5;
8    private float $privateProp = 0.5;
9
10    public function test() {
11        foreach ($this as $k => &$val) {
12            if ($k == 'privateProp') {
13                var_dump($val);
14                $val = 20;
15                var_dump($val);
16                try {
17                    $val = [];
18                } catch (Error $e) {
19                    echo $e->getMessage(), "\n";
20                }
21            }
22        }
23    }
24}
25
26$foo = new Foo;
27foreach ($foo as $k => &$val) {
28    var_dump($val);
29
30    $val = 20;
31    var_dump($foo->$k);
32
33    try {
34        $val = [];
35        var_dump($foo->$k);
36    } catch (Error $e) {
37        echo $e->getMessage(), "\n";
38    }
39}
40$foo->test();
41?>
42--EXPECT--
43int(0)
44int(20)
45Cannot assign array to reference held by property Foo::$bar of type int
46float(0.5)
47float(20)
48Cannot assign array to reference held by property Foo::$baz of type float
49float(0.5)
50float(20)
51Cannot assign array to reference held by property Foo::$privateProp of type float
52