假设你有这样一个类:
class MyClass
{
public function __construct(public int $id, public string $foo)
{
}
}
还有一个生成器,可以像这样创建该类的多个实例:
$myGenerator = function (): \Generator {
yield new MyClass(id: 21, foo: 'fnord');
yield new MyClass(id: 13, foo: 'baz');
yield new MyClass(id: 42, foo: 'Thanks for the fish');
};
我该如何为生成器函数添加类型提示,以便在迭代期间推断每个元素的类型?
foreach ($myGenerator as $instance) {
$instance-> // no autocompletion in IDE as type is not known
}
我不想做的事情:
foreach ($myGenerator as $instance) {
/** @var MyClass $instance */
$instance-> // now autocomplete works inside an IDE
}
由于每次使用生成器时都需要冗余的类型提示,因此我希望在生成器的返回类型层面提供一次类型提示。
有没有更好的替代方法来对生成器进行类型提示?
在伪代码中,我希望能够按照以下方式进行操作:
$myGenerator = function (): \Generator<MyClass> {...}
我认为 PHP 的类型系统不能胜任这项任务,我不介意使用 PHPDoc / PHPStan。主要用途是 IDE 支持(在我的情况下是 PhpStorm,但应该适用于其他 IDE)。
/** @var MyClass[] $generator **/
这样? - Nico Haase