On Mon, Aug 5, 2024, at 8:49 AM, Theodore Brown wrote:
> On Fri, July 26, 2024 at 12:25 Larry Garfield wrote:
>
>> Voting for Asymmetric Visibility is now open.
>>
>> https://wiki.php.net/rfc/asymmetric-visibility-v2
>
> Hi Larry and Ilija,
>
> Thank you for all your work on this RFC!
>
> One part that doesn't make sense to me is this sentence near the end in 
> the "Readonly is incompatible with inheritance" section:
>
>> With asymmetric visibility, the `readonly` usage here can be replaced with 
>> `protected protected(set)` or `readonly protected protected(set)`, avoiding 
>> the need to double-declare properties.
>
> `protected protected(set)` just removes readonly, and is the same as 
> `protected`, right? So couldn't such a change be done now without 
> asymmetric visibility?
>
> And the change to `protected protected(set) readonly` as shown in the 
> example also seems unnecessary, since earlier in the RFC it says that 
> readonly will be changed to imply `protected(set)` rather than 
> `private(set)`. So it seems that no change is needed to the abstract 
> class here - the properties can remain `protected readonly`, and the 
> implementation can be simplified since readonly properties will now 
> imply `protected(set)`.
>
> Or have I misunderstood something here?

I believe in this case you're correct.  That example was written early on, 
before we decided to expand readonly to protected(set) by default.  I didn't 
realize that needed to be updated as well.  Yes, in this case, the widening of 
readonly would also resolve that issue.  `protected protected(set)` would now 
be redundant, but not hurt anything, whereas `protected private(set)` would 
have an effect.  `public public(set) readonly` would also be legal (though I 
don't personally know why you'd do that, there's no inherent reason to make it 
illegal).

--Larry Garfield

Reply via email to