Re: RFC: short and inner classes
| From: | Rob Landers | Date: | Tue, 25 Mar 2025 21:23:48 +0000 |
| Subject: | Re: RFC: short and inner classes | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-126943@lists.php.net to get a copy of this message | ||
On Tue, Mar 25, 2025, at 22:05, Rowan Tommins [IMSoP] wrote:
>
>
> On 25 March 2025 20:29:16 GMT, Rob Landers <rob@bottled.codes> wrote:
> > Personally, I'd feel that file-private should be kept as simple as possible and limit
> > it to "top-level" things, but that doesn't necessarily have to be the case. If we did
> > allow it on methods/properties, when mixing it with regular visibility, what happens? ÏxïóâÍj¦Æ
> > a�7w;fileprivate public private(set) ... means what exactly?
>
>
> If we didn't have "protected", would you ask the same about "protected
> private"? "fileprivate" would be just another access level, not something you'd
> combine with existing ones.
Actually, probably yes :) Mostly just to ask for clarification. In this case though, we have
private(set) and protected(set); would we also want fileprivate(set)? That's what I was getting
at. How do we mix/match up all these things?
>
> > maybe
fileprivate on a property means
> > public in the file, but private
> > outside the file. But then how would that intersect with inheritance?
>
>
> That was the point of my philosophical rambling about Swift: you don't have to define new
> access levels in relation to old ones, or new features as exceptions to old definitions.
>
> You can just define the keywords you allow, and the access they provide. That's true
> whether you're defining "private", "fileprivate", or
> "access_level_42".
>
> For instance, "fileprivate" could simply mean "accessible from any code defined
> in this file". Since classes are fully declared in one file, that makes it a strict superset of
> the access currently meant by "private", and applies equally well to a whole type, a
> method, or a property.
>
> I see no reason for inheritance to be involved at all. If we want an access level that means
> "accessible from any code in this file, or any subclass of the current type", we can make
> up a keyword for that as well - "fileprotected", or "fileprivate_or_protected",
> or whatever.
>
>
> Rowan Tommins
> [IMSoP]
Inheritance gets involved in traits. Traits do "inherit" private access properties
(currently): https://3v4l.org/89I7A
Would file-private properties/methods also be available outside the file, or would those allow
access from inside the new file? Or both?
— Rob