// Intersection type (PHP 8.1): объект должен реализовать ВСЕ типы
function process(Countable&Iterator $collection): void {
echo count($collection);
foreach ($collection as $item) { /* ... */ }
}
// DNF types (PHP 8.2): комбинация union и intersection
function handle((Countable&Iterator)|null $data): void { /* ... */ }
// Практический пример
interface Cacheable {}
interface Serializable {}
function store(Cacheable&Serializable $item): void {
// $item гарантированно реализует оба интерфейса
}Intersection types полезны когда нужно требовать реализацию нескольких интерфейсов без создания промежуточного интерфейса.