Hey Rob,
On 01.07.26 17:43, Rob Landers wrote:
On Wed, Jul 1, 2026, at 10:51, Nick Sdot wrote:
Hey Rowan,
On 01.07.26 15:32, Rowan Tommins [IMSoP] wrote:
On 1 July 2026 04:29:48 BST, Nick Sdot<[email protected]>
<mailto:[email protected]> wrote:
```
final readonly class Dog(
string $name,
)extends Animal {
parent::__construct($name);
}=> {
// class body }
```
The above:
- does NOT have a parent constructor shortcut call -> `extends Animal`
- DOES allow parent constructor call in primary constructor body
- behaves exactly (!) as a conventional constructor; in fact syntax sugar
```
final readonly class Dog(
string $name,
)extends Animal($name)// already IS the parent constructor call... {
// hence, here no parent constructor call allowed }=> {
// class body }
```
The above:
- DOES have a parent constructor shortcut call -> `extends Animal($name)`
- does NOT allow parent constructor call in primary constructor body
- *no difference in parent constructor calling behaviour to what the RFC pr
ooposes now*
...
So where is the complexity?
So now we have to specify:
- a brand new syntax for putting a code block outside the class body
- a parser rule to detect parent conductor calls (is
ParentClassName::__construct also forbidden? What about
DeeperAncestor::__construct?)
- the order of operations if there's a body and a shorthand parent call
- maybe other details of how the constructor body works which I haven't thought
of
As with the rest of the feature, to make the proposed changes work in
the class header, yes. :)
Of course *any* parent constructor call would be forbidden from the
body if the parent shorthand is used. The "already IS the parent...
hence, here no parent..." gives no room for interpretation, I think.
The order could be discussed, and a default (probably after, because
that's how it seem to work without body) be agreed on. Since there
would be a body, manually calling the parent constructor would be
possible if the default doesn't suit ones intend.
I still don't see an explosion of complexity.
What would justify not allowing the body that helps to address a real problem?
Many people see having more than one way to write the same thing as a cost,
which needs to be outweighed by some benefit.
I'm on the fence whether primary constructors as they are in the current RFC
are worthwhile; they're a tidy shorthand for a common case, but not saving that
much over existing constructor promotion.
With your proposal to make them just a different way of writing any constructor, using a
weird new syntax which puts code outside of the class body, I would be a definite
"no".
That's just my opinion of the cost-benefit balance.
Bit sad to see that there is not even the will to discuss it. But
fair, everyone can have their opinion. Then I hope the "on the fence"
will eventually be a "no". Because there is IMO no reality where
introducing this without bodies, and hence with no solution to the
issues I pointed out, is easier to reason about than what I propose
here. Just imagine you have to refactor an existing class with a
primary constructor. `readonly` would prevent what you want to do and
must be removed. This would require you to check and refactor the
whole class, instead of just adding a body. It doesn't make sense.
We don't need more half finished, half not working, confusing
features in PHP.
Rowan Tommins
[IMSoP]
--
Cheers
Nick
Hi Nick,
First of all, the fact that three people have submitted different
syntaxes (putting aside that I also haven’t shared my preference as
well), should be an indication that it isn’t straightforward; just
from a “what does it look like” perspective.
It isn’t simply “just run this code”.
I would very much ask that you move this discussion to a different
thread. As the RFC author, who rejected it as future scope, I can’t
engage with your proposal here. All I can say is that I reject it for
future scope, repeatedly.
Moving it outside the thread would let people in this thread discuss
the RFC as proposed, and if there’s a consensus in the new thread,
perhaps it could be adopted into this RFC or even proposed as an
immediate following RFC.
Arguing for it here, cuts off my hands and is a distraction.
— Rob
As I said earlier, I disagree that this is unrelated. Calling it a
"distraction" is... I don't know. The very feature your RFC proposes
will create a new problem, because you hold the opinion that preexisting
limitations could just be ignored (or moved to future scope) for a *new*
feature. I think that is wrong, and not good for the language -- which I
had to point out. People actively engaged with my concern in this very
branch of the thread, I responded. That is what the list is for? I,
however, understand that you stick to rejecting; I will not add anything
new and if no one else shares my concern then this branch and topic will
naturally die down.
--
Cheers
Nick