Hi Internals, I just noticed the following behaviour: class A { public int $a; public ?int $b; public ?int $c = null; }
$a = new A; var_export(get_object_vars($a)); var_export(get_class_vars('A')); Result: array ( 'c' => NULL, ) array ( 'a' => NULL, 'b' => NULL, 'c' => NULL, ) Is this discrepancy expected? IMO get_object_vars() does the right thing and does not include uninitialized properties in the result array. OTOH, get_class_vars() returns null when the property is uninitialized, which I think is confusing (especially when null is not a valid value for the property), and I feel like this does not respect the documented contract: "get_class_vars — Get the default properties of the class" when null is *not* the default value. I did not file a bug yet as I wanted to gather some feedback first. Thank you. — Benjamin