Juliette Reinders Folmer said:
> Not a fan of using a variable as a return type. This will cause
> havoc for Tokenizer based static analysis tooling.

I will concede that until the tools are updated to handle the new
(currently invalid) syntax, it would cause issues. But that happens
everytime a new syntax is introduced into PHP anyway (the original
return-types RFC, match, the proposed property accessors, etc.), so
I'm a bit confused as why this is an issue that would stop the RFC?

---

Juliette Reinders Folmer said:
> Also don't really see the need as there is the `static` return type
> already.

To quote Nicolas, who said it far better than I could:
> I tried switching from the `@return $this` annotation to
> `function (): static`, which is the closest approximation currently
> supported by the engine, when I realized that this would loosen the
> semantics of the corresponding interfaces[.]

---

Marco Pivetta said:
> I'd see it as useful if the type conveyed identity too, although it
> means that I would never use it, since I design immutable APIs, when
> possible :D

If reading documentation, I'd argue that seeing `function(): $this` in
a class already conveys plenty of "identity". If you're talking about
using the Reflection API to get identity the original RFC by Nikita
stated:
> The `$this` type is a subtype of `static`. As such, it is possible
> to restrict a `static` type to `$this` in a subclass (but not the
> other way around).
> In reflection, the `$this` type is represented as a
> `ReflectionNamedType` with `isBuiltin() == true` and
> `getName() == "$this"`.

So perhaps a change is needed in the returned `ReflectionNamedType` to
better identity the actual class of `$this`? Or am I missing your
point about identity here?

---

Bruce Weirdan said:
>> Luigi Cardamone wrote:
>> Is it possible to replace "$this" with "this"? Cleaner and coherent
>> with "self".
>
> That wouldn't be possible, as `this` is a valid class name:

The "Return Type Declarations", "Scalar Type Declarations", "Reserve
More Types", and "Void Return Type" RFCs all prohibited their usage as
class, interface and trait names. Using `this` or `same` or `whatever`
else is decided is just par for the course.

However, that said, a search of github for:
- `language:php "class This "` returns 5.1k results
  (but it appears that most results are docblock comments)
- `language:php "class This extends"` returns 27 results
- `language:php "class This implements"` returns 8 results
- `language:php "class Same "` returns 290 results
- `language:php "class Same extends"` returns 193 results
- `language:php "class Same implements"` returns 14 results
- `language:php "@return $this"` returns 485k results.

---

Regards,
radar3301

Reply via email to