ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ

PHP Учебник

PHP СТАРТ PHP Интро PHP Установка PHP Синтаксис PHP Комментарии PHP Переменные PHP Echo / Print PHP Типы данных PHP Строки PHP Числа PHP Математика PHP Константы PHP Операторы PHP If...Else...Elseif PHP Switch PHP Циклы PHP Функции PHP Массивы PHP Суперглобальные PHP RegEx

PHP Формы

PHP Обработка формы PHP Проверка формы PHP Обязательные поля формы PHP Форма URL/E-mail PHP Заполнение формы

PHP Расширенный

PHP Дата и время PHP Подключение файлов PHP Обработка файлов PHP Файл открыть/читать PHP Файл создать/записать PHP Файл Загрузить PHP Куки PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Callback функции PHP JSON PHP Исключения

PHP ООП

PHP Что такое ООП PHP классы/объекты PHP Конструктор PHP Деструктор PHP Модификаторы доступа PHP Наследование PHP Константы PHP Абстрактные классы PHP Интерфейсы PHP Трейты PHP Статические методы PHP Статические свойства PHP Пространства имён PHP Итерации

MySQL База данных

MySQL База данных MySQL Подключение MySQL Создать БД MySQL Создать таблицы MySQL Вставить данные MySQL Получить последний ID MySQL Вставить несколько записей MySQL Подготовленные инструкции MySQL Выбрать данные MySQL Where MySQL Order By MySQL Удаление данных MySQL Обновление данных MySQL Ограничение данных

PHP XML

PHP XML Парсеры PHP SimpleXML Парсер PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Интро AJAX PHP AJAX База данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры PHP Компилятор PHP Викторина PHP Упражнения PHP Сертификат

PHP Справочник

PHP Обзор PHP Массив PHP Календарь PHP Дата PHP Каталог PHP Ошибка PHP Исключение PHP Файловая система PHP Фильтр PHP FTP PHP JSON PHP Ключевые слова PHP Libxml PHP Почта PHP Математика PHP Разное PHP MySQLi PHP Сеть PHP Output Control PHP RegEx PHP SimpleXML PHP Поток PHP Строка PHP Обработка переменных PHP XML Парсер PHP Zip PHP Часовые пояса

PHP. Уроки для начинающих

PHP Итерации (Итерируемые объекты)


PHP - Что такое итерации?

Итерируемым является любое значение, которое можно перебрать с помощью цикла foreach().

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


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

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

Пример

Используйте аргумент итерируемой функции:

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

$arr = ["a", "b", "c"];
printIterable($arr);
?>
Попробуйте сами »

Пример

Вернуть итерируемый объект:

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

$myIterable = getIterable();
foreach($myIterable 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);
?>
Попробуйте сами »