1--TEST-- 2Test typed properties passed to typed function 3--FILE-- 4<?php 5$foo = new class { 6 public ?int $bar = 42; 7 public int $baz; 8 9 public function &getIterator() { 10 foreach (['1', &$this->bar] as &$item) { 11 yield $item; 12 } 13 } 14}; 15 16function foo(?int &$a) { 17 var_dump($a); 18 $a = null; 19} 20 21foo($foo->bar); 22 23try { 24 $foo->baz = &$foo->bar; 25} catch (Error $e) { echo $e->getMessage(), "\n"; } 26$foo->bar = 10; 27 28foreach ($foo->getIterator() as &$item) { 29 $foo->baz = &$item; 30 var_dump($foo->baz); 31} 32 33try { 34 foo($foo->bar); 35} catch (Error $e) { echo $e->getMessage(), "\n"; } 36 37var_dump($foo); 38?> 39--EXPECT-- 40int(42) 41Cannot assign null to property class@anonymous::$baz of type int 42int(1) 43int(10) 44int(10) 45Cannot assign null to reference held by property class@anonymous::$baz of type int 46object(class@anonymous)#1 (2) { 47 ["bar"]=> 48 &int(10) 49 ["baz"]=> 50 &int(10) 51} 52