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