On Sun, May 10, 2026, at 18:28, Daniel Scherzer wrote: > Hi internals, > > I'd like to start the discussion for a new RFC about adding friendship in > PHP. This is a follow-up to a pre-RFC discussion thread > https://externals.io/message/130710. > > * RFC: https://wiki.php.net/rfc/friends > * Implementation: https://github.com/php/php-src/pull/21937 > > Thanks, > -Daniel
Hi Daniel, I worked on the namespace visibility RFC before running out of time, and life isn't slowing down anytime soon; thus I wish you the best of luck with this one. First of all ... the RFC doesn't address several inheritance/override interactions worth working through. I'd invite you to read the thread here: https://externals.io/message/129147 -- you're going to run into a lot of the same issues in this RFC (and especially the follow-up namespace one), and you have some of the same problems. Take this example: class P { friend F; private int $x = 0; } class C extends P { protected int $x = 0; } class F { static function set(P $p, int $v) { $p->x = $v; } } F::set(new C, 5); // fatal The friend grant on P creates a non-local invariant that subclass authors of P can break without realizing. C's author, adding `x` for their own internal reasons, doesn't know they've broken some F that depends on the parent contract. C's tests pass. F's tests pass. Integration breaks at runtime in production. private(namespace) had the identical pathology. — Rob
