1. Плагин для PHPStorm, добавляющий много разных проверок по качеству кода: https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-
На что мне плагин открыл глаза:
— В функцию in_array нужно передавать третьим параметром true, чтобы сравнение элементов было строгим (===), без приведения типов (==)
— Анонимные функции/замыкания необходимо всегда объявлять статическими, не делая этого только в крайне необходимых случаях: https://habr.com/ru/post/561550/
— В юнит-тестах вместо assertTrue($cond1 === $cond2) можно использовать assertSame($cond1, $cond2)
— Не стоит использовать array_merge внутри циклов. Однако, решения этой проблеме не указано. Я заменил на $output = […$output, …$arrayToMerge]; Подробнее: https://chemaclass.medium.com/never-use-array-merge-in-a-loop-74917b056ff9
— Модификаторы abstract/final идут перед модификаторами области видимости: https://www.php-fig.org/psr/psr-12/
— Приведение типов через (int)/(bool)/etc до 2 раз быстрее, чем аналогичные функции приведения intval/boolval/etc: https://stackoverflow.com/a/35949025/5320740
— Вместо базового класса Exception лучше кидать RuntimeException
— Void в качестве типа возврата функции лучше, чем его отсутствие
2. Была задача скачать и обработать 30 гигабайтный файл с одного государственного ресурса
Соединение обрывалось примерно на 25-30 процентах завершённости
Начал думать что делать и решением в лоб оказалось пытаться скачать файл несколько раз, при этом передавая в curl сдвиг
Пример реализации тут: https://gist.github.com/ndunks/778c7efad0956e0f99deae73c52e718f
Осталось его только распаковать. В памяти, естественно, это всё не поместится, поэтому я использовал файловые потоки, чтобы по кускам вытаскивать данные из архива в отдельную папку. Пример реализации тут: https://stackoverflow.com/a/8102667/5320740
Добавить комментарий