gpt4 book ai didi

php - 如何在 php 中键入提示生成器?

转载 作者:行者123 更新时间:2023-12-04 17:16:24 25 4
gpt4 key购买 nike

假设你有一个类:

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 的类型系统不适合这个,我不介意使用 phpdocs/phpstan。主要用例是 IDE 支持(在我的例子中是 phpStorm,尽管它应该可以工作)。

最佳答案

与 phpdoc 上的其他集合一样

/**
* @return \Generator|MyClass[]
*/
$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');
};

关于php - 如何在 php 中键入提示生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68638379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com