Итерируемые

Iterable - псевдотип, введённый в PHP 7.1. Он принимает любой массив (array) или объект, реализующий интерфейс Traversable. Оба этих типа итерируются с помощью foreach и могут быть использованы с yield from в генераторах.

Использование Iterable

Тип iterable может использоваться как тип параметра для указания, что функция принимает набор значений, но ей не важна форма этого набора, пока он будет использоваться с foreach. Если значение не является массивом или объектом, реализующим Traversable, будет выброшено исключение TypeError.

Пример #1 Пример использования iterable в качестве параметра

<?php

function foo(iterable $iterable) {
    foreach (
$iterable as $value) {
        
// ...
    
}
}

?>

Параметры, объявленные как iterable, могут использовать null или массив в качестве значения по умолчанию.

Пример #2 Пример установки значения по умолчанию для iterable

<?php

function foo(iterable $iterable = []) {
    
// ...
}

?>

Iterable также может использоваться как возвращаемый тип для указания, что функция вернёт итерируемое значение. Если возвращаемое значение не является массивом или объектом, реализующим Traversable, будет выброшено исключение TypeError.

Пример #3 Пример использования iterable в качестве возвращаемого типа

<?php

function bar(): iterable {
    return [
123];
}

?>

Функции, объявляющие iterable как возвращаемый тип, также могут быть генераторами.

Пример #4 Пример использования iterable в качестве возвращаемого значения генератора

<?php

function gen(): iterable {
    yield 
1;
    yield 
2;
    yield 
3;
}

?>

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