Personally I still think we should have used TS/JS syntax for computed
properties. PHP is much closer to typescript than Java/C# and we already
have support for modifiers. Slightly more verbose but these issues would be
non-existent.

On Sun, Jun 9, 2024 at 10:03 AM Nikita Popov <p...@npopov.com> wrote:

> On Mon, Apr 15, 2024, at 18:43, Larry Garfield wrote:
>
> The vote for the Property Hooks RFC is now open:
>
> https://wiki.php.net/rfc/property-hooks
>
> Voting will close on Monday 29 April, afternoonish Chicago time.
>
>
> I know I'm a few months late on this one, but I figured I'd still leave a
> couple of thoughts... Overall, the proposal is well thought out and does
> address many of the reservations I had about my original accessors proposal.
>
> One of the more interesting choices in this proposal is to base whether
> the property is virtual or backed on the presence of a "$this->prop"
> reference in the accessor implementation. I think that, conceptually at
> least, this is a good choice.
>
> What I find concerning though, is that the presence/absence of such a
> reference also affects the meaning of the get and set hooks. If the
> property is virtual and it only has get, then the property cannot be set.
> If the property is backed and only has get, then the property *can* be set.
> A no-op setter is implied. (Similar for only having a set hook.)
>
> This has the unfortunate consequence that you actually have to look at the
> accessor implementation to determine the API of the class -- only looking
> at the "prototypes" (i.e. signatures without implementation bodies) is no
> longer sufficient! This seems both unfortunate and unprecedented.
>
> This could have been avoided by still requiring an explicit no-op "set;"
> at the expensive of some additional verbosity.
>
> The other thing that stood out to me are the short-hand notations using
> =>. There was a prior RFC on the topic (
> https://wiki.php.net/rfc/short-functions), which has been declined. That
> RFC would have introduced => ... as a general shorthand for { return ...; }.
>
> The shorthand notation for get is compatible with that formulation.
> However, the shorthand notation for set is not. In that case => ... isn't
> short for { return ...; }, but rather for { $this->prop = ...; }.
>
> This seems pretty unfortunate to me, and possibly closes the door on
> revisiting a general short function syntax in the future. Mostly I'm
> scratching my head at why this was included in the proposal at all, as I
> would not expect this use of the set hook to be common enough to justify a
> shorthand. The common case is a guard that checks the value without
> modifying it.
>
> Putting this to the "would this shorthand have passed if it were
> introduced by a separate RFC on top of the base implementation" test, I
> think the answer would have been a clear "no".
>
> Regards,
> Nikita
>

Reply via email to