Iterable是 PHP 7.1 中引入的一個(gè)偽類型。它接受任何 array 或?qū)崿F(xiàn)了 Traversable 接口的對(duì)象。這些類型都能用 foreach 迭代, 也可以和 生成器 里的 yield from 一起使用。
可迭代對(duì)象可以用作參數(shù)類型,表示函數(shù)需要一組值, 但是不會(huì)關(guān)心值集的形式,因?yàn)樗鼘⑴c foreach 一起使用。如果一個(gè)值不是數(shù)組或 Traversable 的實(shí)例,則會(huì)拋出一個(gè) TypeError。
示例 #1 Iterable 可迭代參數(shù)類型示例
<?php
function foo(iterable $iterable) {
foreach ($iterable as $value) {
// ...
}
}
?>
聲明為可迭代的參數(shù)可能會(huì)使用 null
或者一個(gè)數(shù)組作為默認(rèn)值。
示例 #2 可迭代參數(shù)默認(rèn)值示例
<?php
function foo(iterable $iterable = []) {
// ...
}
?>
可迭代對(duì)象還可以用作返回類型,表示函數(shù)將返回一個(gè)可迭代的值。 如果返回值不是數(shù)組或 Traversable 的實(shí)例,則會(huì)拋出一個(gè) TypeError。
示例 #3 可迭代返回類型示例
<?php
function bar(): iterable {
return [1, 2, 3];
}
?>
將可迭代對(duì)象聲明為返回類型的函數(shù)也可能是 生成器。
示例 #4 可迭代生成器返回類型的示例
<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
?>