Итераторы, генераторы

259
13 марта 2017, 10:59

Зачем на практике нужны итераторы? Вообще, интересует в общем-то php и js, но они же есть во многих языках. Например зачем мне библиотека SPL и её интерфейсы итераторов, если у меня есть итерируемый массив, по которому можно пробежаться форычом. Хотелось бы увидеть примеры использования итераторов тогда, когда по другому проблему решить нельзя. Опять же я могу представить себе какую-либо структуру кастомную, по которой требуется чтобы можно было бегать как по массиву, тогда пишем итератор для неё. Но вот примеры костыльных собственных структур в php я не припомню. Ни разу не сталкивался с какими нибудь стеками, очередями и другими структурами в wordpress, joomla, drupal, сайты на yii2, symfony и т.д.

Тот же вопрос к генератором - их практическое использование. Ну тут допустим пригодятся они для обработки логов сервера. Нам нужна статистика, сколько хостов и т.д. и открыть файл лога мы не можем, он большой, а так скачиваем по строку и запросами в бд обновляем статистику и так пока не обработаем файл. Я правильно понимаю? Но опять же логично что такой софт будет писаться на c++, python или другом языке, но никак не на php.

Answer 1

Так foreach как раз с итератором и работает. Оно и есть самый простой пример.

Фактически, напрямую, без использования итератора, можно перебрать только индексированный массив. Если вы захотите перебрать ассоциативный массив без использования итератора, вам придется либо превратить его в индексированный, либо вытащить в индексированный массив его ключи и перебирать его с помощью for.

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

Про генераторы, вот например одно из преимуществ Потребление памяти PHP-генераторами

READ ALSO
Вывести URL для текущей вкладки

Вывести URL для текущей вкладки

Добрый ДеньДля тестового примера хочу попробовать вывести URL для текущей вкладки

304
После смены с mysql на mysqli появилась ошибка Unexpected end of JSON input

После смены с mysql на mysqli появилась ошибка Unexpected end of JSON input

Начал переводить код с mysql на mysqli, все работало, но когда дело дошло до json, то почему-то он начал выдавать ошибки

294