Iterable является псевдотипом введенным в PHP 7.1. Он принимает любой array или объект, реализующий интерфейс Traversable. Оба этих типа итерируются с помощью foreach и могут быть использованы с yield from в генераторах.
Тип iterable можно использовать как тип параметра, для обозначения того, что функция принимает набор значений, но ей не важна форма этого набора, пока его не потребовалось перебирать в foreach. Если переданное значение не является массивом или экземпляром класса реализующего Traversable, то будет выброшено исключение TypeError.
Пример #1 Пример использования iterable в качестве параметра
<?php
function foo(iterable $iterable) {
foreach ($iterable as $value) {
// ...
}
}
?>
Параметр декларированный как iterable, по умолчанию, можно определять как NULL
или
как массив.
Пример #2 Пример задания значения по умолчанию для iterable
<?php
function foo(iterable $iterable = []) {
// ...
}
?>
Также тип iterable можно использовать для определения типа возвращаемого значения. Если при таком использовании будет возвращено что либо кроме массива или объекта реализующего Traversable, то будет выброшено исключение TypeError.
Пример #3 Пример использования iterable в качестве возвращаемого значения
<?php
function bar(): iterable {
return [1, 2, 3];
}
?>
Генераторы также могут объявляться как возвращающие тип iterable.
Пример #4 Пример использования iterable в качестве возвращаемого значения генератора
<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
?>
Наследующие/реализующие классы могут "расширять" типы параметров методов использующих array или Traversable до типа iterable или "сужать" iterable до array или Traversable.
Пример #5 Пример приведения типа iterable
<?php
interface Example {
public function method(array $array): iterable;
}
class ExampleImplementation implements Example {
public function method(iterable $iterable): array {
// Тип параметра "расширен", а возвращаемого значения "сужен".
}
}
?>