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

Reply via email to