Re: Re: RFC: Nested Classes
| From: | Tim Düsterhus | Date: | Thu, 24 Apr 2025 15:20:56 +0000 |
| Subject: | Re: Re: RFC: Nested Classes | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-127185@lists.php.net to get a copy of this message | ||
Hi
On 4/24/25 17:09, Rob Landers wrote:
Thank you for your feedback! I think you would then have the problem that was pointed out by Levi the other day; where you would then have ambiguity. If you could have both private and public names in the same namespace, then you would end up not knowing which one was being referred to.That is a design error in the RFC then.
Also, it is worth pointing out that private symbols are *not* "invisible" or "non-existent" from outside classes. They emit their own errors: https://3v4l.org/PEGeA that indicate you tried to access something you shouldn't be able to. This is different than when you try to access something that actually doesn't exist: https://3v4l.org/nWVPVFair enough about the error message. You can also access them with Reflection or the Closure hack. They are nevertheless ”non-existent” from the public API PoV: https://3v4l.org/Us6VV
<?php
class Foo {
private string $bar = "foo";
private function foo(): array {}
}
class Bar extends Foo {
private array $bar = [];
private function foo($foo): int {}
}
class Baz extends Bar {
public self $bar;
}
$baz = new Baz();
$baz->bar = $baz;
var_dump($baz);In subclasses I can “redefine” private properties or methods and they do not interact at all. Properties have separate storage locations and can have differing types. Methods do not need to have compatible signatures either. Best regards Tim Düsterhus