## Iterables

Iterable es un seudotipo introducido en PHP 7.1. Acepta cualquier array u objeto que implemente la interfaz Traversable. Estos dos tipos se recorren con foreach y se pueden emplear con yield from dentro de un generador.

### Empleo de iterables

Iterable se puede usar como tipo de parámetro para indicar que una función requiere un conjunto de valores, pero que no importa la forma del dicho conjunto ya que se utiizará con foreach. Si un valor no es un array o una instancia de Traversable, se lanzará un TypeError.

Ejemplo #1 Ejemplo de de tipo de parámetro iterable

`<?php
function foo(iterable $iterable) {
foreach ($iterable as $valor) {
// ...
}
}
?>`

Los parámetros declarados como iterable pueden usar `null` o un array como valor predeterminado.

Ejemplo #2 Ejemplo de valor predeterminado de un parámetro iterable

`<?php
function foo(iterable $iterable = []) {
// ...
}
?>`

Iterable se puede usar como tipo de retorno para indicar que una función devolverá un valor iterable. Si el valor devuelto no es un array o una instancia de Traversable, se lanzará un TypeError.

Ejemplo #3 Ejemplo de tipo de retorno iterable

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

Las funciones que declaren su tipo de retorno como también pueden ser generadores.

Ejemplo #4 Ejemplo de tipo de retorno de generadro iterable

`<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
?>`

### Varianza del tipo iterable

Las clases que extiendan/implementen podrían ampliar los métodos usando array o Traversable como tipos de parámetro a iterable o reducir los tipos de retorno de iterable a array o Traversable.

Ejemplo #5 Ejemplo de varianza del tipo iterable

`<?php
interface Ejemplo {
public function method(array $array): iterable;
}
class ImplementaciónDeEjemplo implements Ejemplo {
public function method(iterable $iterable): array {
// Parámetro ampliado y tipo de retorno reducido.
}
}
?>`