Я создал функцию с именем foo
, которая вызывает вызываемый \Closure
объект, созданный в bar
.
В документации по Closure :: call () здесь говорится, что метод call
"временно привязывает замыкание к newthis и вызывает его с любыми заданными параметрами".
В моем примере у меня нет никаких параметров, но я вызываю метод baz
из объекта, который я вызываю.При выполнении кода он выдает «Hello world», как и ожидалось.Но моя IDE не может обнаружить метод baz
в функции anoymus и вместо этого помечает предупреждение: 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!";
}
}
Я могу добавить что-то вроде этого.
$b->foo(function(){
/** @var B $this */
return $this->baz();
});
Однако, если я запускаю статический анализ кода, такой как php stan.Затем он сообщает: Call to an undefined method A::baz().
Поэтому мой вопрос таков: как мне ссылаться на newthis
в моей анонимной функции, возможно ли это вообще?