summaryrefslogtreecommitdiff
path: root/Zend/tests/type_declarations/typed_properties_034.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/tests/type_declarations/typed_properties_034.phpt')
-rw-r--r--Zend/tests/type_declarations/typed_properties_034.phpt51
1 files changed, 51 insertions, 0 deletions
diff --git a/Zend/tests/type_declarations/typed_properties_034.phpt b/Zend/tests/type_declarations/typed_properties_034.phpt
new file mode 100644
index 0000000000..c3885af39f
--- /dev/null
+++ b/Zend/tests/type_declarations/typed_properties_034.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test typed properties passed to typed function
+--FILE--
+<?php
+$foo = new class {
+ public ?int $bar = 42;
+ public int $baz;
+
+ public function &getIterator() {
+ foreach (['1', &$this->bar] as &$item) {
+ yield $item;
+ }
+ }
+};
+
+function foo(?int &$a) {
+ var_dump($a);
+ $a = null;
+}
+
+foo($foo->bar);
+
+try {
+ $foo->baz = &$foo->bar;
+} catch (Error $e) { echo $e->getMessage(), "\n"; }
+$foo->bar = 10;
+
+foreach ($foo->getIterator() as &$item) {
+ $foo->baz = &$item;
+ var_dump($foo->baz);
+}
+
+try {
+ foo($foo->bar);
+} catch (Error $e) { echo $e->getMessage(), "\n"; }
+
+var_dump($foo);
+?>
+--EXPECT--
+int(42)
+Typed property class@anonymous::$baz must be int, null used
+int(1)
+int(10)
+int(10)
+Cannot assign null to reference held by property class@anonymous::$baz of type int
+object(class@anonymous)#1 (2) {
+ ["bar"]=>
+ &int(10)
+ ["baz"]=>
+ &int(10)
+}