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

Reply via email to