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