On Mon, Apr 8, 2024 at 3:42 PM Ilija Tovilo <tovilo.il...@gmail.com> wrote:
>
> Hi everyone
>
> Heads-up: Larry and I would like to start the vote of the property
> hooks RFC tomorrow:
> https://wiki.php.net/rfc/property-hooks
>
> We have worked long and hard on this RFC, and hope that we have found
> some middle-ground that works for the majority. One last concern we
> have not officially clarified on the list:
>
> https://externals.io/message/122445#122667
>
> >> I personally do not feel strongly about whether asymmetric types make it 
> >> into the initial implementation. Larry does, however, and I think it is 
> >> not fair to exclude them without providing any concrete reasons not to. 
> >> [snip]
> >
> > My concern is more about the external impact of what is effectively a 
> > change to the type system of the language: [snip] will tools like PhpStan 
> > and Psalm require complex changes to analyse code using such properties?
>
> In particular, this paragraph is referencing the ability to widen the
> accepted $value parameter type of the set hook, described at the
> bottom of https://wiki.php.net/rfc/property-hooks#set. I have talked
> to Ondřej Mirtes, the maintainer of PHPStan, and he confirmed that
> this should not be complex to implement in PHPStan. In fact, PHPStan
> already offers the @property-read and @property-write class
> annotations, which can be used to describe "virtual" properties
> handled within __get/__set, already providing asymmetric types of
> sorts. Hence, this concern should be a non-issue.
>
> Thank you to everybody who has contributed to the discussion!
>
> Ilija

I was playing around with 3v4l.org. Is the implementation up-to-date there?

I don't have any hard objections at the moment, but after playing with
it for a while, I do kind of wonder if it's a lot of complexity for
what is effectively a niche feature because:

 1. It does not support asymmetric visibility for get/set. Having a
public getter and private setter seems really natural.
 2. You can't access accessors for "siblings".
 3. You can't do by-reference set (important for arrays).
 4. You can't satisfy a parent's readonly property with a getter in a child.

Now, points 2 through 4 are fairly minor and niche by themselves, but
if we take all these restrictions as a whole... I'm a bit worried.

I also don't like the syntax. I can ignore this for the vote and still
vote yes because I don't like the syntax, but with these other
things... I'm worried.

Reply via email to