Один синтаксис скрывает разные модели
Последовательный список событий, карта счётчиков по типу и множество уже встреченных id могут быть представлены array, но требуют разных инвариантов. Удаление элемента списка оставляет разрыв ключей; JSON после этого способен превратить коллекцию в object. array_values восстанавливает список только когда такое изменение осмысленно.
Pulse называет переменные eventsList, countsByType и seenIds, а проверки формы выполняет на boundary. Смешанная коллекция с частью числовых и частью строковых ключей не проходит дальше.
Выбор операции
Set поверх map
Для проверки повторного event id удобно хранить ключи со значением true. in_array выполняет линейный поиск и требует строгого режима, тогда как isset по ключу обычно выражает membership быстрее. Если допустимо значение null, array_key_exists отвечает на другой вопрос.
Ключ из внешнего ввода нормализуется и ограничивается до помещения в карту. Иначе атакующий создаст огромный набор произвольных ключей и превратит защиту от дублей в источник расхода памяти.
SPL как более точный словарь
SplQueue выражает FIFO без array_shift, который перемещает элементы. SplPriorityQueue подходит при выборе следующего события по приоритету, но его поведение при одинаковых приоритетах нужно определить отдельно. SplFixedArray экономит часть накладных расходов только при известном размере и не является автоматическим ускорением.
SPL-структуры имеют собственные правила итерации, клонирования и сериализации. Перед заменой array напишите тест операции и измерьте данные Pulse; точное имя не оправдывает сложность само по себе.
Итераторы вместо промежуточных массивов
FilterIterator и LimitIterator могут выражать ленивую обработку, но цепочка классов должна оставаться читаемой. Генератор часто проще для предметного преобразования. Выбор оценивается по прозрачности остановки, обработке ошибки и способности повторить итерацию.
Iterable может быть одноразовым. Функция, проходящая источник дважды, обязана потребовать повторяемую коллекцию или материализовать ограниченный набор явно.
Лаборатория
Реализуйте окно последних 100 событий через SplQueue, множество id через map и очередь трёх наиболее критичных типов через SplPriorityQueue. Опишите поведение одинакового приоритета.
- List перед JSON имеет последовательные ключи.
- Membership использует ключи, а не нестрогий in_array.
- Память множества имеет верхнюю границу.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- php.nethttps://www.php.net/manual/en/book.spl.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- php.nethttps://www.php.net/manual/en/language.types.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .