Hi internals,
I’d like to add support for friendship in PHP. I don’t mean friendship in the PSR-8 huggable way, but rather in the C++ way of allowing access to non-public parts of a class without needing to use Reflection.
I haven’t started work on implementing this yet, but there is a big question about how to indicate friendship that I wanted to get some feedback on. Specifically, should it be added with a new keyword, or with an attribute?
Keyword
- matches C++
- suggests that friends are aspects of the class, like properties and constants and methods
- but would look a bit ugly if we added support for friends that are just for specific properties/methods/constants
Attribute
- matches how other metadata is added to classes
- would make it look cleaner if subsequently support was added for friendship being applied to specific properties/methods/constants
- would differ from the current builtin attributes in that it doesn’t just add/remove warnings, but changes some functionality
For a more in-depth explanation of the inspiration and these two potential approaches, see https://scherzer.dev/Blog/20260309-php-friends. To be clear, I have not yet written an implementation, much less the RFC, but I wanted to get some initial feedback on if people would prefer a new keyword, or an attribute, for declaring friends.
-Daniel