如何在Laravel Collection迭代过程中为元素添加类型注解
PhpStorm 迭代变量类型注解实现方案
你可以通过以下3种常用方式实现需求,PhpStorm 和 Psalm 均支持识别:
方法1:单行类型注解(临时指定,兼容性最好)
直接在foreach循环内为$row变量单独声明类型,是最通用的写法,所有版本IDE都能识别:
/** * @param Collection $rows */ public function collection(Collection $rows) { foreach ($rows as $row) { /** @var Collection $row */ dump($row->); // 此时$row已能获得Collection类的完整代码提示 } }
方法2:泛型参数注解(更规范,符合Psalm标准)
直接在方法参数处声明集合的元素类型,用泛型写法一次性指定,不需要循环内重复注解:
/** * 尖括号内的类型参数代表集合内元素的类型 * @param Collection<Collection> $rows */ public function collection(Collection $rows) { foreach ($rows as $row) { dump($row->); // $row自动识别为Collection类型 } }
方法3:自定义Collection类全局泛型声明(适合自研集合类场景)
如果你使用的是自己封装的Collection类,可以在类定义处提前声明泛型模板,后续所有使用该类的地方都可以直接用泛型指定元素类型:
/** * @template T * @implements IteratorAggregate<T> */ class Collection implements IteratorAggregate { // 类的实现逻辑 }
之后你在任何地方使用Collection<Collection>声明变量,IDE都能自动识别迭代后元素的类型。
内容的提问来源于stack exchange,提问作者Eddy
相关产品推荐
相关产品推荐

