Re: [RFC] Undefined Property Error Promotion
| From: | Rowan Tommins | Date: | Wed, 06 Apr 2022 17:27:30 +0000 |
| Subject: | Re: [RFC] Undefined Property Error Promotion | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-117487@lists.php.net to get a copy of this message | ||
On Wed, 6 Apr 2022 at 14:37, Guilliam Xavier <guilliam.xavier@gmail.com>
wrote:
> First sentence of the introduction: "Undefined properties are those that
> have not yet been defined either by the presence of a property declaration,
> or by adding them to the properties hashmap through direct assignment, or
> by having them assigned by an internal function such as json_decode."
>
$obj->prop alone doesn't define the property
> "prop", but `$obj->prop =
> whatever` does.
>
I missed the implications of this at first too; maybe some examples would
be useful?
The more I think about it, the more different scenarios there are here,
some of which are more obvious than others:
1) Reading a property that is not listed in a class definition, and has
never been written to
2) Reading a property that is not listed in a class definition, but HAS
previously been assigned to
3) Reading a property that IS listed in the class definition, but has been
"removed" with unset()
4) Reading a property that is listed in the class definition, but has no
default value, and has never been assigned
For each of these, we could consider the behaviour:
a) on an instance of stdClass
b) on a class with the AllowDynamicProperties attribute
c) on a class with neither
Of these:
* Case 1 seems like the most obviously in scope of the proposal.
* Case 2c would be impossible, because assigning to the property would
already have given an error. 2a and 2b are the open question that's already
been mentioned.
* Cases 3 and 4 already throw an error for *typed* properties, which track
the special "uninitialised" state, but for untyped properties case 4 does
not currently raise a Warning.
As with the previous RFC, I think this should be an opportunity to define
the consistent behaviour we want, rather than just looking at what previous
versions did.
Regards,
--
Rowan Tommins
[IMSoP]