> All of which is to say that, yes, there are use cases for an "is this
property initialized" check that is less fugly than the get_object_vars()
hack I have to rely on now.

I'd like to see this:

if ($objectVar->property is uninitialized) {
...
}

or/and:

if ($objectVar->property is initialized) {
...
}

--
Erick de Azevedo Lima

Em seg., 20 de mai. de 2024 às 14:28, Larry Garfield <la...@garfieldtech.com>
escreveu:

> On Sat, May 18, 2024, at 5:41 PM, Rowan Tommins [IMSoP] wrote:
> > On 18 May 2024 17:13:49 BST, Larry Garfield <la...@garfieldtech.com>
> wrote:
> >>However, that breaks down with readonly properties, which are not
> allowed to have a sentinel.  Uninitialized is their sentinel, for better or
> worse.
> >
> > Sorry, I don't understand this statement at all. A readonly property
> > can be set to PatchState::KeepCurrentValue just like any other. If the
> > intention is that that state will be overwritten with an actual value
> > later, then it's not a readonly property.
> >
> > I guess you have some different scenario in mind?
> >
> >
> >> And as I noted earlier in the thread, when writing a serializer or
> other dynamic systems (an ORM probably would have the same issue), you
> really need to be able to differentiate between null and uninitialized.
> Even if you think the uninitialized value is a sign of an error, it's
> coming from code you don't control so you have to be able to handle it
> somehow.
> >
> > If a property is uninitialized, the object is in an invalid state, and
> > attempting to read that property gives an error. That's by design, and
> > as it should be.
> >
> > Are you saying that you want to be able to detect the error before it
> > happens? Why?
>
> For context, remember I maintain a serializer library, so I have to
> support objects that may indeed be in an invalid state, and depending on
> the incoming data may not be able to guarantee an object is in a valid
> state.  I have to do everything via reflection and/or visibility-busting
> closures.  I also maintain an attributes library that, necessarily, has
> multiple methods that get called post-constructor before the object is
> "ready."  Admittedly neither of these are common cases, but neither are
> they invalid cases.
>
> Readonly's current design, and the (IMO, very bad) support from SA tools,
> works on the assumption that your readonly properties are 1. Based on
> constructor params; 2. are always guaranteed set after the constructor.
> While those are true in the majority case, they're not true in the
> universal case.
>
> IOW, "this readonly property is not set by the time the constructor is
> done, so your object is invalid, so your argument is invalid" is not a fair
> or accurate statement.  And even then, lots of code needs to be able to
> inspect an object to determine if it is valid or not, even if just to give
> the user a better error message than "Oops, you tried to read an
> uninitialized property, we gonna crash now."  (As noted, I maintain
> multiple such libraries.  ORMs would be the other big use case, I think.)
>
> All of which is to say that, yes, there are use cases for an "is this
> property initialized" check that is less fugly than the get_object_vars()
> hack I have to rely on now.
>
> --Larry Garfield
>

Reply via email to