> Le 19 juil. 2025 à 09:46, Rob Landers <rob@bottled.codes> a écrit : > > > > On Sat, Jul 19, 2025, at 03:04, Claude Pache wrote: >> >> >> >>> Le 19 juil. 2025 à 00:41, Rob Landers <rob@bottled.codes> a écrit : >>> >>> The original author (Nikita) suggested that there's nothing in the original >>> design that precludes accessors -- and highlights languages where there are >>> both and they are doing just fine more than 5 years later. >>> >> >> Hi Rob, >> >> It is indeed entirely reasonable to have both readonly properties and hooked >> properties (aka accessors), and today PHP has indeed both of them (and even >> asymmetric visibility on top of that, as a separate feature contrarily to >> C#). But it doesn’t mean that it is reasonable for the *same* property to be >> *both* readonly and hooked, which is the point that is currently disputed. — >> What do the other languages allow? Is it possible to define a readonly >> property with a user-defined getter? (Disclaimer: Even if one of them allows >> such a thing, I’ll still think that it is a bad idea.) >> >> —Claude > > Hey Claude, > > From what I've seen in other languages, this combination is fairly common and > not inherently poblematic. > > - C# allows get hooks with user-defined logic, even in readonly structs. > - Kotlin uses val with a get() body, which is readonly from the consumer's > perspective, even though the value is computed. > - TypeScript allows a get-only accessor which acts readonly. > - Swift also allows get-only computed accessors/hooks.
Hi Rob, The main problem is that we don’t agree on the meaning of “readonly property”. I’ve check TypeScript: * It has getters and setters, which correspond to PHP get/set hooks without backing store. * Separately, it also has a `readonly` modifier that can be applied to properties; the semantics is that such a property may be initialised either at declaration or inside the constructor, but cannot be modified afterwards. That corresponds approximatively to PHP readonly properties. * But a “get-only accessor” is not the same thing as a “readonly property” in the specific sense of ”a property decorated with the `readonly` modifier”. Also, you cannot add the readonly modifier to a get accessor. —Claude