On Sunday, 9 June, 2024 at 19:03, 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.
>
>
> 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
>

Correct me if I'm wrong, but here's how I understand the short-hand
notation in setter hook in combination with
https://wiki.php.net/rfc/short-functions:

```
final class Foo
{
    // Before
    public string $x {
        set {
            $this->x = $this->transformX($value);
        }
    }

    private function transformX(string $value): string => trim($value);

    // After
    public string $x {
        set => trim($value);
    }
}
```

So it's kinda consistent if you say that only the right side of the
property assignment is replaced with short-hand notation, not the whole
assignment. And then `$this->x =` is implicit.

-- 
Regards,
Valentin

Reply via email to