> 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 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).

—Claude

[1]: https://wiki.php.net/rfc/readonly_properties_v2#rationale



Reply via email to