3v4l.org

run code in 300+ PHP versions simultaneously
<?php class A { private mixed $foo; public function setFoo($value) { $this->foo = $value; } public function unsetFoo() { unset($this->foo); } public function dump() { var_dump($this); try { var_dump($this->foo); } catch ( Error $err ) { echo 'ERROR: ', $err->getMessage(), "\n"; } } } $a = new A; echo "Initial:\n"; $a->dump(); echo "\nAssign null:\n"; $a->setFoo(null); $a->dump(); echo "\nUnset:\n"; $a->unsetFoo(); $a->dump(); echo "\nAssign value:\n"; $a->setFoo(42); $a->dump();
Output for 8.1.24 - 8.1.28, 8.2.11 - 8.2.18, 8.3.0 - 8.3.7
Initial: object(A)#1 (0) { ["foo":"A":private]=> uninitialized(mixed) } ERROR: Typed property A::$foo must not be accessed before initialization Assign null: object(A)#1 (1) { ["foo":"A":private]=> NULL } NULL Unset: object(A)#1 (0) { ["foo":"A":private]=> uninitialized(mixed) } ERROR: Typed property A::$foo must not be accessed before initialization Assign value: object(A)#1 (1) { ["foo":"A":private]=> int(42) } int(42)

preferences:
68.97 ms | 403 KiB | 26 Q