Pseudotipo Iterable en PHP 7

Muy a menudo, las funciones en PHP aceptan o devuelven una matriz u objeto que implementa la interfaz \Traversable. Aunque ambos tipos se pueden usar en las construcciones foreach, fundamentalmente, una matriz es un tipo primitivo; los objetos no lo son. Esto dificultaba que las funciones razonaran sobre este tipo de parámetros iterativos y valores de retorno.

PHP 7.1 aborda esta necesidad al introducir el pseudotipo iterable. La idea es usarlo como una declaración de tipo en un parámetro o tipo de retorno para indicar que el valor es iterable. El tipo iterable acepta cualquier matriz, cualquier objeto que implemente Traversable y generadores.
El siguiente ejemplo demuestra el uso de iterable como parámetro de función:

function import(iterable $users)
{
// …
}
function import(iterable $users = null)
{
// …
}
function import(iterable $users = [])
{
// …
}

Intentar pasar el valor a la función de importación anterior que no sea una instancia de matriz de Traversable o generador arrojará \TypeError. Sin embargo, si se asigna el valor predeterminado, ya sea nulo o una matriz vacía, la función funcionará.
Los siguientes ejemplos demuestran el uso de iterable como un valor de retorno de función:

function export(): iterable {
return [
'Johny',
'Tom',
'Matt'
];}
function mix(): iterable {
return [
'Welcome',
33,
4200.00
];
}
function numbers(): iterable {
for ($i = 0; $i <= 5; $i++) {
yield $i;
}
}

Una cosa a tener en cuenta es que iterable se implementa como un nombre de clase reservado en PHP. Lo que esto significa es que cualquier clase de usuario, interfaz o trait llamado iterable arrojará un error.

Comparte