On Wed, Jul 3, 2024, at 15:29, Claude Pache wrote: > > >> Le 3 juil. 2024 à 14:42, Rob Landers <rob@bottled.codes> a écrit : >> >> On Wed, Jul 3, 2024, at 14:28, Claude Pache wrote: >>> >>> >>>> Le 3 juil. 2024 à 11:54, Claude Pache <claude.pa...@gmail.com> a écrit : >>>> >>>> >>>> 2. As for readonly, I think that the invariant it is supposed to provide >>>> should be enforced as strictly as possible. It means that `readonly` is >>>> only acceptable if there is no `get` hook. >>> >>> Hi, >>> >>> One more thing, why I think that we should be strict here. It is not just >>> for preventing the user to write *dumb* code, it is also for preventing >>> them to write *creative* code, e.g. >>> >>> ```php >>> class doc { >>> public readonly int page { >>> get => $this->page + $this->offset; >>> } >>> private int $offset = 0; >>> public function __construct(int $page) { >>> $this->page = $page; >>> } >>> public function foo() { >>> // $this->offset may be adjusted here >>> } >>> } >>> ``` >>> >>> —Claude >> >> I don't see anything wrong with that code. $page doesn't say "immutable" it >> says "readonly", as in "cannot write to". >> >> — Rob > > The fact you don’t see anything wrong is *precisely* the issue. According to > the original RFC [1], the intention of readonly properties was immutability, > not just non-writability. For the weaker case of non-writability, it was > explicitly mentioned the possibility of (future) asymmetric property > visibility.
That was before properties could be functions? Now I suppose we have to decide if the definition of read-only doesn't mean read-only, but immutability; despite the original intention. > > That said, I agree that “immutable” would have been a better word choice than > “readonly” for conveying the original intention. We could also ignore the > original intention and reinterpret the feature in case everyone agrees > (personally, I prefer the original intention, but I won’t fight for that). Agree. I just wanted to point out that there were two interpretations: the English definition, and the original intention of the RFC. — Rob