Меню
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON PHP КАК
     ❯   

PHP Учебник


PHP Формы


PHP Продвинутый


PHP ООП


MySQL База данных


PHP XML


PHP - AJAX


PHP Примеры


PHP Справочник



PHP - Итерируемые объекты



Итерируемые объекты PHP

В PHP итерируемый объект (iterable) — это значение, которое можно перебирать с помощью цикла foreach().

Псевдотип iterable был представлен в PHP 7.1 и может использоваться как тип данных для аргументов функций и возвращаемых значений функций.

Итерируемым объектом может быть массив или объект, реализующий интерфейс Iterator.


PHP - Использование итерируемых объектов

Ключевое слово iterable может использоваться как тип данных параметра функции или как возвращаемый тип функции:

Пример

Итерируемый параметр функции:

<?php
function printIterable(iterable $x) {
  foreach($x as $item) {
    echo $item;
  }
}

// Вызов с массивом:
printIterable(["a", "b", "c"]);

// Вызов с объектом:
$iterator = new ArrayIterator(["d", "e", "f"]);
printIterable($iterator);
?>
Попробуйте сами »

Пример

Итерируемый возвращаемый тип:

<?php
function getIterable():iterable {
  return ["a", "b", "c"];
}

foreach(getIterable() as $item) {
  echo $item;
}
?>
Попробуйте сами »


PHP - Создание итерируемых объектов

Массивы

Все массивы являются итерируемыми, поэтому любой массив может использоваться в качестве аргумента функции, требующей итерируемый объект.

Итераторы

Любой объект, реализующий интерфейс Iterator, может использоваться в качестве аргумента функции, требующей итерируемый объект.

Итератор содержит список элементов и предоставляет методы для перебора этих элементов. Он хранит указатель на один из элементов списка. Каждый элемент в списке должен иметь ключ, который можно использовать для поиска элемента.

Итератор должен иметь следующие методы:

  • current() - Возвращает элемент, на который в данный момент указывает указатель. Может быть любого типа данных
  • key() - Возвращает ключ, связанный с текущим элементом в списке. Может быть только целым числом, числом с плавающей точкой, булевым значением или строкой
  • next() - Перемещает указатель на следующий элемент в списке
  • rewind() - Перемещает указатель на первый элемент в списке
  • valid() - Если внутренний указатель не указывает ни на какой элемент (например, если next() был вызван в конце списка), этот метод должен возвращать false. В любом другом случае возвращает true

Пример

Реализуйте интерфейс Iterator и используйте его как итерируемый объект:

<?php
// Создаем итератор
class MyIterator implements Iterator {
  private $items = [];
  private $pointer = 0;

  public function __construct($items) {
    // array_values() гарантирует, что ключами являются числа
    $this->items = array_values($items);
  }

  public function current() {
    return $this->items[$this->pointer];
  }

  public function key() {
    return $this->pointer;
  }

  public function next() {
    $this->pointer++;
  }

  public function rewind() {
    $this->pointer = 0;
  }

  public function valid() {
    // count() показывает, сколько элементов в списке
    return $this->pointer < count($this->items);
  }
}

// Функция, которая использует итерируемые объекты
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}

// Используем итератор как итерируемый объект
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>
Попробуйте сами »


×

Связаться с отделом продаж

Если вы хотите использовать услуги schoolsw3 как образовательное учреждение, команда или предприятие, отправьте нам электронное письмо:
sales@schoolsw3.com

Сообщить об ошибке

Если вы хотите сообщить об ошибке или внести предложение, отправьте нам электронное письмо:
help@schoolsw3.com

Schoolsw3 оптимизирован для обучения и подготовки. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно проверяются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего контента.
При использовании Schoolsw3 вы соглашаетесь прочитать и принять наши условия использования,
политику использования файлов cookie и конфиденциальности.

Авторское право 1999- © Copyright. Все права защищены. Schoolsw3 работает на SW3.CSS.