On Wed, Mar 12, 2025, at 5:10 AM, Rob Landers wrote:

> Hello internals,
>
> I've made some major updates to the text of the RFC to clarify 
> behaviors and revisited the implementation (which is still under 
> development, though I hope to have a draft by the end of this weekend). 
> Here's a broad overview of what has changed in inner classes:
>
> - Accessing inner classes is done via a new token: ":>" instead of "::".
> - Inner classes may now be infinitely nested.
> - Inner classes may be declared `abstract`.
> - Documented changes to ReflectionClass.
> - Usage of `static` to refer to inner classes is restricted to prevent 
> accidental violations of LSP.
>
> Otherwise, there are not any big changes, but a lot of time was spent 
> clarifying behavior and expanding on the reasoning for those decisions 
> in the RFC itself.
>
> — Rob

I've been following this thread with interest, and at the moment I'm honestly 
undecided.  I certainly see the use cases for this functionality (whatever it 
gets named), but as a practical matter it sounds like it introduces a lot of 
extra clunk and complexity.  And it seems like the use cases could be addressed 
as well with either fileprivate or module-private.  (The former being 
considerably less work.)

So, how would nested classes compare to fileprivate, in terms of ability to 
solve the problem space?  As I understand it, the goal is:

1. Classes that can be instantiated only by the class that uses them.
2. But can be returned from that class to a caller and reused as appropriate.

The autoloading question (loading a whole file for just an implementation 
detail value object) is not one that carries much weight for me, as that's a 
user-space question, not an engine question.  (Nothing in PHP itself says you 
cannot put 20 3 line classes or enums together in one file.  It's just PSR-4 
that says not go. Even composer would allow it if configured properly)  So how 
would the less-complicated alternative compare?

--Larry Garfield

Reply via email to