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