首页 > 解决方案 > PHP:推断此方法链的返回类型

问题描述

我正在使用 PHPStorm。例如,我有一个简单的查询类,其中包含各种方法来处理排序、过滤等。它最终返回构造函数中传递的类的实例。

class AnimalQuery {
    private $classString;

    public function __construct(string $classString){
        $this->classString = $classString;
    }

    public function where(string $key, string $val): AnimalQuery {
        // Database things would happen here
        return $this;
    }

    public function orderBy(string $val): AnimalQuery {
        // Database things would happen here
        return $this;
    }

    public function first() {
        // Database things would happen here
        return new $this->classString();
    }
}

还有一个充当模型的类,例如:

class Dog {
    public static function query(): AnimalQuery {
        return new AnimalQuery(static::class);
    }

    public function bark() {
        echo 'Woof!';
    }
}

可以这样调用:

$doggo = Dog::query()->where('name', 'Fido')->orderBy('species')->first();
$doggo->bark();

这确实返回了一个 Dog 的实例。但是,PHPStorm 当然不明白这一点。有没有办法通过第一个方法返回在 AnimalQuery 的构造函数中传递的类的实例来提示 PHPStorm?

在 Typescript 中,我可能为此使用了泛型,但 PHP 中不存在这些泛型。

标签: php

解决方案


推荐阅读