3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Example { public int $foo; public function __get($var) { echo "__get was called for '$var'\n"; return 999; } public function __set($var, $val) { echo "__set was called for '$var'\n"; $this->{$var} = $val; } } echo "Creating instance\n\n"; $example = new Example; echo "Reading before assignment\n"; try { var_dump($example->foo); } catch (Error $e) { echo "Error: ", $e->getMessage(), "\n"; } echo "Assigning\n"; $example->foo = 42; echo "\nUnsetting\n\n"; unset($example->foo); echo "Reading after unset\n"; try { var_dump($example->foo); } catch (Error $e) { echo "Error: ", $e->getMessage(), "\n"; } echo "Assigning after explicit unset\n"; $example->foo = 42;
Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14
Creating instance Reading before assignment Error: Typed property Example::$foo must not be accessed before initialization Assigning Unsetting Reading after unset __get was called for 'foo' int(999) Assigning after explicit unset __set was called for 'foo'

preferences:
75.75 ms | 407 KiB | 5 Q