如何声明可遍历类型



PHP中有多种类型提示,现在在PHP 8中有更多,甚至在《诗篇》中也有更多。但是声明类型,而不是暗示期望的类型呢?

我有一个interface Collection extends Traversable,我需要声明它是Abc类型的可遍历对象。我该如何做到这一点,让PHPDoc或诗篇知道,当我迭代Collection的实例时,每个元素的类型都是Abc

换句话说,我需要在接口级别上保证断言始终通过:

function doWithItems(Collection $items): void
{
foreach ($items as $item) {
assert($item instanceof Abc);
}
}

我的代码中没有工作接口示例(这些示例可能很难正确处理(,但由于《诗篇》在Traversable上实现了interface Traversable<TKey, TValue>模板,它将类似于:

/**
* @extends Traversable<array-key,Abc>
*/
interface Collection extends Traversable

我的代码中使用Doctrine Collections的一个工人阶级级别的例子(它有非常彻底的诗篇支持,你可以查看他们是如何做到的(:

/**
* @extends ArrayCollection<array-key, ShowInterface>
*/
final class Shows extends ArrayCollection

最新更新