1--TEST--
2Nullable typed property
3--FILE--
4<?php
5class Foo {
6    public ?int $foo = null;
7}
8
9$x = new Foo();
10var_dump($x);
11var_dump($x->foo);
12
13$x->foo = 5;
14var_dump($x->foo);
15
16$x->foo = null;
17var_dump($x->foo);
18
19unset($x->foo);
20try {
21    var_dump($x->foo);
22} catch (Throwable $e) {
23    echo $e->getMessage()."\n";
24}
25try {
26    $x->foo = "ops";
27} catch (Throwable $e) {
28    echo $e->getMessage()."\n";
29}
30?>
31--EXPECT--
32object(Foo)#1 (1) {
33  ["foo"]=>
34  NULL
35}
36NULL
37int(5)
38NULL
39Typed property Foo::$foo must not be accessed before initialization
40Cannot assign string to property Foo::$foo of type ?int
41