On Sat, Jul 19, 2025, at 12:09, Claude Pache wrote: > > >> 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 >
The error you get when trying to modify the "get-only accessor" is `Error: Cannot assign to 'name' because it is a read-only property` Thus, readonly is implied by the get-only accessor, there's no need to specify it directly. — Rob