Цикл — доказательство прогресса
У while должен существовать изменяемый показатель, приближающий завершение. У foreach источник ограничивает число шагов, но тело всё равно может удерживать растущий массив и исчерпать память. Запишите, что меняется на каждой итерации и какое состояние переносится дальше.
break завершает цикл, continue пропускает остаток текущего шага. Вложенные уровни и числовой аргумент break быстро ухудшают читаемость; часто лучше вынести поиск в функцию и вернуть результат.
Поток элементов
Iterable расширяет выбор реализации
Параметр iterable принимает массив и Traversable. Функция обработки не обязана знать, поступили элементы из памяти, генератора или курсора. Возвращать iterable удобно, если потребителю не нужны count, случайный доступ и повторный проход.
Генератор одноразовый: после полного прохода его нельзя просто перемотать как массив. Побочные эффекты выполняются во время итерации, а не при создании генератора, поэтому ошибки и запросы к источнику происходят позже.
Ленивая последовательность
<?php
declare(strict_types=1);
function repetitionRange(int $from, int $to): iterable
{
if ($from > $to) {
return;
}
for ($value = $from; $value <= $to; $value++) {
yield $value;
}
}
foreach (repetitionRange(3, 5) as $value) {
echo $value;
}Пакет — управляемая граница
Запись каждой строки в отдельной транзакции медленна, а одна транзакция на миллион строк удерживает блокировки и усложняет повтор. Ограниченный batch создаёт компромисс: известное потребление памяти, периодический commit и checkpoint для продолжения.
Не ловите исключение и не продолжайте автоматически. Ошибка схемы должна остановить импорт, а дефект одной пользовательской строки может попасть в отчёт. Классификация отказов важнее самого try/catch.
Лабораторная работа
Создайте генератор, выдающий записи тренировки из небольшого массива, затем обработчик пакетов по три элемента. Посчитайте максимальное число объектов, одновременно удерживаемых в памяти.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- php.nethttps://www.php.net/supported-versions.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .