Hey internals, You may remember my RFC about Records (https://wiki.php.net/rfc/records). There was something intentionally left out, and due to life events, I am quite behind schedule on this one. BUT, what I left out (and the main reason for the short syntax) is the ability to have locally scoped records in a class definition.
Example using an anonymous record: $x = new class { public record Point(int $x, int $y); // from inside the class, there is no special scope public function foo(): Point { return new Point(1, 1); } } $point = new $x::Point(1, 2); Anyway, I think I've settled on an implementation that is acceptable, but I wanted your feedback before moving forward. Instead of this being limited to Records -- an entirely new type of type and syntax -- would we rather have short class declarations (similar to the rules in the Records RFC) and locally scoped classes? class Outer { // able to be instantiated from anywhere public class Inner(int $y); // a private/protected class can only be instantiated within methods/classes bound to Outer protected readonly class ProtectedInner(int $z); } Instantiation is done by static access: new Outer::Inner(1), which is currently a syntax error. Public nested classes may be used as type hints and return types as well as properties in other classes. There are quite a few more things left to investigate before updating the RFC (or drafting a new one), but I am at a crossroads and I wanted to gather people's feedback first. If this is a big "NO" (or if someone else has started working on this and I'm just so happening to accidentally step on their toes, again): I don't want to spend several days/weeks digging into the details for classes. However, it would probably look something like the above. Note, this doesn't preclude you from using a longer syntax, if that is your preference. class Outer { public class Inner { public function __construct(public int $z) {} } } Anyway, I'd love to hear any preferences or thoughts -- strong or otherwise. I probably won't reply, but I will read everything and take it into consideration as I continue down this road. Also, if there is already someone working on this ... please speak up so I don't get accused of stealing ideas again! — Rob