Hey Tim,

> On 10. Jul 2025, at 17:37, Tim Düsterhus <t...@bastelstu.be> wrote:
> 
> Hi
> 
> Am 2025-07-08 17:10, schrieb Larry Garfield:
>> The only way to make the readonliness fully guaranteed would be to force a 
>> readonly property to be cached
> 
> Or by not allowing a `get` hook on readonly properties, of course.
> 
> Best regards
> Tim Düsterhus

Personally, I would really like to have `get` hooks on readonly properties. 
Please consider something like this:

```php
readonly class Foo
{
    public function __construct(
        public Output $style,
        public string $some {
            get => Output::One === $this->style ? ucfirst($this->some) : 
strtoupper($this->some);
            set => '' !== $value ? $value : throw new \Exception();
        }
    ) {}
}
```

Easy-to-digest one-liners. Concerns remain separated. Set takes care of 
validation, get formats.
If `get` would not be allowed, we couldn’t do such an obvious thing. For what 
reason?
Instead we would need to delegate formatting to the `set` hook which is messy.

```php
readonly class Foo
{
    public function __construct(
        public Output $style,
        public string $some {
            set => '' !== $value ? (Output::One === $this->style ? 
ucfirst($value) : strtoupper($value)) : throw new \Exception();
        }
    ) {}
}
```

Now that I have proposed alternative implementations with caching, I don’t see 
why `get` should not be allowed.

Cheers,
Nick

Aside: I added two links to alternative implementations to the PR description.

Reply via email to