Php/docs/language.types.iterable

来自菜鸟教程
跳转至:导航、​搜索

可迭代对象

Iterable是 PHP 7.1 中引入的一个伪类型。它接受任何实现了 Traversable 接口的 array 或对象。这些类型都能用 foreach 迭代,并且可以与 yield from 在一个 generator 中使用。

使用可迭代对象

可迭代对象可以用作参数类型,表示函数需要一组值, 但是不会关心值集的形式,因为它将与 foreach 一起使用。如果一个值不是数组或 Traversable 的实例,则会抛出一个 TypeError

Example #1 可迭代参数类型示例

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

声明为可迭代的参数可能会使用 null 或者一个数组作为默认值。

Example #2 可迭代参数默认值示例

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

可迭代对象还可以用作返回类型,表示函数将返回一个可迭代的值。 如果返回值不是数组或 Traversable 的实例,则会抛出一个 TypeError

Example #3 可迭代返回类型示例

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

将可迭代对象声明为返回类型的函数也可能是 generators

Example #4 可迭代生成器返回类型的示例

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

可迭代类型的类型差异

扩展/实现的类可以把使用 arrayTraversable 作为参数类型扩展为 iterable ,或者把“狭窄”的返回类型从 iterable 扩展为 array 或者 Traversable

Example #5 可迭代类型差异示例

<?phpinterface Example {    public function method(array $array): iterable;}class ExampleImplementation implements Example {    public function method(iterable $iterable): array {        // Parameter broadened and return type narrowed.    }}?>