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 [
123];
}

?>

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.
    
}
}

?>

add a note add a note

User Contributed Notes 1 note

up
-10
j_jaberi at yahoo dot com
4 years ago
Just to note:
Though objects may (or may not) be Traversable, the can use in foreach because implicit conversion to array
<?php
class Foo {
    public
$a = 1;
    public
$b = "Helo";
};

$bar = new Foo;

foreach(
$bar as $elm) {
    echo
$elm . ' ';
}

?>
prints 1 Hello
Even
<?php
$bar
= new stdClass
foreach($bar as $elm) {
    echo
$elm . ' ';
}
?>
is correct.
To Top