douchen1924 2019-03-01 01:30
浏览 92

类型提示如何与Closure :: call一起使用?

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?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
    • ¥20 西门子S7-Graph,S7-300,梯形图
    • ¥50 用易语言http 访问不了网页
    • ¥50 safari浏览器fetch提交数据后数据丢失问题
    • ¥15 matlab不知道怎么改,求解答!!
    • ¥15 永磁直线电机的电流环pi调不出来
    • ¥15 用stata实现聚类的代码
    • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
    • ¥20 docker里部署springboot项目,访问不到扬声器
    • ¥15 netty整合springboot之后自动重连失效