I have created a function called foo
which invokes a callable \Closure
object created in bar
.
The documentation for Closure::call() here says that the call
method "temporarily binds the closure to newthis, and calls it with any given parameters".
In my example I do not have any parameters, but do call the baz
method from the object I am invoking the call. When executing the code it echos "Hello world", as expected. But, my IDE is unable to detect the baz
method within the anoymus function and instead flags a warning: Method baz not found in A
.
class A
{
public function bar(): string
{
$b = new B();
return $b->foo(function(){
return $this->baz();
});
}
}
class B
{
public function foo(\Closure $callback): string
{
$callback->call($this);
}
public function baz(): string
{
return "Hello world!";
}
}
I can add something like this.
$b->foo(function(){
/** @var B $this */
return $this->baz();
});
However, if I run a static code analysis like php stan. Then it reports:
Call to an undefined method A::baz().
Therefore, my question is: How should I reference newthis
within my anonymous function, is this even possible?