Hi Zoltán,
On Mon, Apr 17, 2023 at 11:13 PM Zoltán Fekete <[email protected]>
wrote:
> Hey,
> > public function withStatus($code, $reasonPhrase = ''): Response
> > {
> > return clone $this {
> > $this->statusCode = $code;
> > $this->reasonPhrase = $reasonPhrase;
> > };
> > }
>
> How to refer to any of the properties of the current instance? Let's say
> this:
>
> ```
> class Foo {
> protected int $code;
> protected string $message;
> public function withStatus($code, $message): Foo {
> return clone $this {
> $this->code = $code; // so far so good
> // Which $this->message is what?
> $this->message = "cloned: (" . $this->message . ")" . $message;
> }
> }
> }
> ```
Yes, it's true that it looks weird that $this is present in two places with
two different meanings, but that's just because we are cloning $this. If we
were cloning $object, it would be clearer.
$this inside the braces is referring to the new object after it was cloned,
after __clone() was executed, if defined.
The old instance data is already copied over, no real need to reference
that.
Maybe we can think about it a bit more and improve the idea. I'm
thinking we can have a closure/callable or an instance method reference
instead of a block of code.
Also, that might be preferable, as there is a natural way to either use
closure with "use" or pass parameters.
I don't like too much how $code and $message are referenced inside the
block of code... maybe it's not an issue.
Also, I'm not really sure how easy it would be to model this behavior, to
have a block of code where $this would reference something else than
outside of it.
Regards,
Alex