On Tue, Jun 25, 2024 at 2:29 AM radar3301 <radar3...@gmail.com> 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