我创建了一个名为foo
的函数,该函数调用在\Closure
中创建的可调用bar
对象。
Closure :: call()here的文档说,call
方法“将闭包临时绑定到newthis,并使用任何给定的参数调用它”。
在我的示例中,我没有任何参数,但是确实从我正在调用的对象中调用baz
方法。执行代码时,它会按预期方式回显“ Hello world”。但是,我的IDE无法检测到anoymus函数中的baz
方法,而是标记了一个警告: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
,这甚至可能吗?