Php/docs/language.types.iterable

提供:Dev Guides
< Php
移動先:案内検索

Iterable

Iterable は PHP 7.1 で導入された疑似型です。array、あるいは Traversable インターフェイスを実装したオブジェクトを 許容します。これらの型は、いずれも foreach で繰り返し可能であり、また、 ジェネレータ 内で yield from できます。

Iterable の使用

Iterable は、関数が値のセットを要求するものの、foreach とともに使うため、 値の形式は問わないことを示すパラメータ型として使用できます。値が、配列でも Traversable のインスタンスでもない場合は、 TypeError がスローされます。

例1 Iterable パラメータ型の例

<?phpfunction foo(iterable $iterable) {    foreach ($iterable as $value) {        // ...    } }?>

Iterable として宣言されたパラメータは、null または配列をデフォルト値 として使用できます。

例2 Iterable パラメータのデフォルト値の例

<?phpfunction foo(iterable $iterable = []) {    // ...}?>

Iterable は、繰り返し可能な値を関数が返すことを示すため、戻り値の型としても 使用できます。戻り値が、配列でも Traversable の インスタンスでもない場合、TypeError がスローされます。

例3 Iterable 戻り値の例

<?phpfunction bar(): iterable {    return [1, 2, 3];}?>

戻り値の型として Iterable を宣言する関数は、ジェネレータ にもなります。

例4 Iterable 戻り値のジェネレータの例

<?phpfunction gen(): iterable {    yield 1;    yield 2;    yield 3;}?>

Iterable 型の可変性

継承したクラス、あるいはインターフェイスを実装したクラスは、 パラメータ型に arrayTraversable を使っている メソッドを Iterable に拡張できます。また、戻り値の型を Iterable から arrayTraversable に縮小できます。

例5 Iterable 型の可変性の例

<?phpinterface Example {    public function method(array $array): iterable;}class ExampleImplementation implements Example {    public function method(iterable $iterable): array {        // パラメータが拡張され、戻り値が縮小された。    }}?>