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