Re: Re: [RFC] [Discussion] Friends
| From: | Tim Düsterhus | 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 UserFrom 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