Iterables

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

?>

Приведение типа iterable

Наследующие/реализующие классы могут "расширять" типы параметров методов использующих array или Traversable до типа iterable или "сужать" iterable до array или Traversable.

Пример #5 Пример приведения типа iterable

<?php

interface Example {
    public function 
method(array $array): iterable;
}

class 
ExampleImplementation implements Example {
    public function 
method(iterable $iterable): array {
        
// Тип параметра "расширен", а возвращаемого значения "сужен".
    
}
}

?>

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top