3v4l.org

run code in 500+ PHP versions simultaneously
<?php class X { public int $a; public int $b; public int $c; public function __isset($name) { var_dump('Called for' .$name); return false; } } $x = new X; $x->a = 2; $x->b = 2; //I am deliberately not setting a value for "c" var_dump($x); var_dump(isset($x->a)); unset($x->a); var_dump($x); var_dump(isset($x->a)); // So why it's called now, since it's the same state?
Output for 8.2.31, 8.3.0 - 8.3.31, 8.4.1 - 8.4.21, 8.5.0 - 8.5.6
object(X)#1 (2) { ["a"]=> int(2) ["b"]=> int(2) ["c"]=> uninitialized(int) } bool(true) object(X)#1 (1) { ["a"]=> uninitialized(int) ["b"]=> int(2) ["c"]=> uninitialized(int) } string(11) "Called fora" bool(false)

preferences:
48.09 ms | 749 KiB | 4 Q