Re: Re: [RFC] [Discussion] Friends

From: Date: Mon, 08 Jun 2026 09:19:43 +0000
Subject: Re: Re: [RFC] [Discussion] Friends
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-131166@lists.php.net to get a copy of this message
Hi Am 2026-06-04 01:13, schrieb Daniel Scherzer:
Seeing no further feedback, I have adjusted the RFC and the implementation to only allow access to protected properties/methods/constants. This qualifies as a "major change" and triggers a 14 day cooldown period.
I've given the RFC another read and stumbled over:
Friendship is not inherited. If UserFactory has a subclass NamedUserFactory, that subclass cannot access the protected details of User
From what I see this would also be in violation of the LSP, because subclasses are not fully interchangeable with the top-level class. It would also need clarification what the relevant “authority” for accessibility is: Is it the class name of the actual class or is it the defining class of the method in question? i.e.
    class User { friend UserFactory; protected function __construct() { } }
    class UserFactory {
        public function foo() { new User(); }
    }
    class ChildUserFactory extends UserFactory { }
    $f = new ChildUserFactory();
    $f->foo(); // Is this legal? ChildUserFactory is not a friend, but foo() is defined in UserFactory.
Best regards Tim Düsterhus

« previous php.internals (#131166) next »