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 {
// パラメータが拡張され、戻り値が縮小された。
}
}
?>