On Wed, May 29, 2024 at 10:18 PM Larry Garfield <la...@garfieldtech.com> wrote:
> As promised, Ilija and I offer this revised version of asymmetric > visibility. > > https://wiki.php.net/rfc/asymmetric-visibility-v2 > > Hey Larry, Ilija, I have one concern so far, and it's related to the inheritance section. If in a class I define the property as private, I know that there is no way for external scope or extending classes scope to read or write to the property. (of course, ignoring reading/writing using reflection or re-binded closures) If an extending class defines the property with a wider visibility, protected or public, it will shadow the initial one and not change its visibility. Now, if I define the property as public private(set) (or protected private(set)) with similar intentions, to make sure that there is no way for external scope or extending classes scope to write to the property, while allowing reading from external scope (or extending classes scope). But the problem is that an extending class can define the property as public protected(set) (or protected protected(set)), and that will easily allow the property that I wanted to make sure it is private for writing to be changed by an extending class to be protected. The main suggestion I can think of, is to now allow widening the write visibility when it is private. I mean, in general, to make sure it is not possible for other extending classes to access private parent class properties/methods we can use two mechanisms: - disallowing to change the visibility and making it an error - shadowing the parent property/method While shadowing works for symmetric visibility, it doesn't really work for asymmetric visibility, so disallowing seems to be a good option here. Also, maybe marking the properties as final could play a role here, not allowing private visibility for write on properties to be widened or completely not allowing it to change/redefined. Regards, Alex