Re: Add $this return type
On Tue, Jun 25, 2024 at 2:29 AM radar3301 <[email protected]> wrote:
> I'm looking for initial feedback on the following proposal.
>
> Often, we have the following (fluent interface) setter method:
>
> public function setName(?string $name): static
> {
> $this->name = $name;
>
> return $this;
> }
>
> I propose to add "$this" as a return type, ie:
>
> public function setName(?string $name): $this
> {
> $this->name = $name;
> // implicit return $this;
> }
>
> public function setName(?string $name): $this
> {
> $this->name = $name;
> // this would be an (compiler?) error
> return $somethingOtherThanThis;
> }
>
> public function setName(?string $name): $this
> {
> $this->name = $name;
> $self = $this;
> // this would not be an error
> return $self;
> }
>
> public function setName(?string $name): $this
> {
> $this->name = $name;
> // technically useless, but not an error
> return $this;
> }
>
> public function setName(?string $name): $this
> {
> $this->name = $name;
> if ('foobar' === $name) {
> // not an error to return early
> return;
> }
> // do some other stuff
>
> // any of the above legal examples
> }
>
> It should be obvious, but functions outside of a class context would not
> be able to use this syntax.
>
> BC:
> There would be no BC breaks, as this syntax is currently invalid (Parse
> error: syntax error, unexpected variable "$this").
>
> Other Considerations:
> With regards to reflection and inheritance, "$this" would be considered an
> alias for "static".
>
> Regards,
> radar3301
>
I strongly agree that an alias for the "static" keyword is really necessary
to improve the semantics of the language.
The word "static" is used for many things: static methods, static classes
and Late Static Bindings (that is the case that you are discussing).
I think that in the case of Late Static Bindings (e.g. new static()
or
return type ..(): static
), the word "static" does not give any clue about
the meaning of that code.
Thus, I like your proposal.
The part that I do not like is the implicit return: it may confuse
developers and static analysis tools.
Is it possible to replace "$this" with "this"? Cleaner and coherent with
"self".
Regards,
Luigi
Thread (8 messages)