Никогда так не делайте, ни на коленке, ни на станке с программным управлением:
$new_dir = null;
Если переменная содержит массив, то и должна быть инициализирована, как массив.
Заодно пропадет необходимость в лишнем условии if($new_dir)
Ну и разделить эту кучу-малу не помешало бы.
одна функция собирает в массив абсолютные пути ко всем файлам в дереве, а вторая накладывает водяной знак. И в аккуратном цикле вызывает вторую для результатов первой.
Самый простой сценарий для проверки контроллера на излишний вес я нашел здесь:
Попробуйте написать консольную команду, которая выполняет ту же самую функцию, что и экшен в контроллере. Создание нового пользователя к примеру. Если не пришлось дублировать код из контроллера — всё нормально, контроллер выполняет только свою работу, и не пытается быть моделью. Если код пришлось дублировать — это именно тот код, который должен быть вынесен из контроллера в модель.
Ваша бравада эмоционально оправдана, но со стороны смотрится жалко. Звучит это всё, как "Я не профессионал, я любитель. И поэтому я чихал на традиционные представления, что дважды два равно четыре. У меня будет 7!". И с таким отношением вы никогда не дойдете до квадратных уравнений.
Ой, зря вы взяли этот обиженный тон.
Поймите, ваш код говорит о себе куда больше, чем вы хотели бы сказать оправданиями про "реальный код, в котором все правильно".
Добавления палочки со стрелочкой к вызову функции тоже недостаточно. Оно не делает ваш код объектно-ориентированным, а работу с БД менее унылой.
И ваша реакция на совершенно справедливое замечание о нормализации БД в комментарии выше — это тоже очень, очень печально.
Не стыдно чего-то не знать. Стыдно принимать в штыки критику и отказываться учиться.
Судя по оговоркам ("В качестве СУБД я использую расширение MySQLi", "законодательство, обязывающее хранить информацию о пользователях не менее полугода" в контексте обсуждения автоинкремента и пр.) — вы начинающий программист. Если поставите себе целью подтянуть код до современных стандартов, то через пару лет у вас получится то, что не стыдно показать широкой аудитории.
Сейчас же, уж извините, у вас старый добрый спгетти-код, даром что завернутый в класс. В одну кучу смешались SQL, HTTP, файловая система. Никакой абстракции, никакого разделения ответственности. Обработка ошибок где-то лишняя ('cannot make dir: ' ), где-то отсутствует совсем (mysqli), где-то однозначно вредная (echo $e->getMessage();).
В качестве работы над ошибками попробуйте сделать отдельные сервисы для работы с БД и HTTP. Для работы с таблицей файлов в БД также нужен будет отдельный класс. И ради бога, забудьте уже этот чудовищный mysql_query стайл. А то получается как в анекдоте — "ложечку вынул, а глаз все равно зажмуриваешь". Буковку i к вызовам функций приписал, а все остальное осталось как прежде.
В итоге вместо ручного колупания с SQL должно получиться что-то вроде
$this->repository->save($url, $meta, остальные параметры);
В конкретной реализации тоже много странного (непонятно, зачем отдельный запрос для сохранения хэшей и размера файла; непонятно, почему логика получения файла сделана в РНР, а не в БД, почему вообще по одному и тому же url может оказаться больше одного файла и пр.) но это уже мелочи по сравнению со структурными проблемами.
Проект вызывает смешанные чувства.
Вызывают уважение энтузиазм и предполагаемая цель (обучение школьников, если я правильно понимаю).
Всё остальное, начиная с технических аспектов реализации — очень плохо.
Риторика "Сделано в России" явно осталась от репортажа в районной многотиражке, где она смотрелась уместно, но выглядит дико при публикации на техническом ресурсе.
Логика при оценке собственного продукта у автора отказывает начисто
есть шанс, что вы можете создать популярный продукт, поскольку продуктовая конкуренция отсутствует
— это что вообще? Как связаны востребованность продукта и самопальность инструмента разработки?
Исходная статья полезная, но пожалуйста, если русский язык для вас родной, вычитайте этот текст на свежую голову, и исправьте хотя бы согласование членов предложения. Глаза болят читать все эти "жонглирование типа", "поддержку, которое". Про смысловые ляпы я уж молчу. Понять смысл предложения "Это может пригодиться, когда вы понимаете, как происходят преобразования" можно только мысленно переведя обратно на английский.
Если же не родной, то, возможно, вам пока рано заниматься переводами на русский.
Я думаю что Хабр — не очень подходит для такой дискуссии. Тостер или пхпклуб или реддит подойдут больше.
Но в любом случае надо гораздо четче формулировать свои мысли — как предпосылки, так и предложения.
Три куцых абзаца после многообещающего спойлера "давайте заглянем внутрь" вызывают недоумение.
"Рецензия" написана левой пяткой за 5 минут, даже фамилия автора книги не указана. По стилю это фактически коммент в ВК, а не публикация на Хабре. Или — даже скорее — платные отзывы на Маркете.
Вы счастливый человек, что основное время при разработке у вас занимает написание кода, а не размышления, какой именно код написать. И экономия нажатия двух кнопок значительно повычит скорость разработки.
Наши предложения в комментариях:
->
Никогда так не делайте, ни на коленке, ни на станке с программным управлением:
Если переменная содержит массив, то и должна быть инициализирована, как массив.
Заодно пропадет необходимость в лишнем условии
if($new_dir)Ну и разделить эту кучу-малу не помешало бы.
одна функция собирает в массив абсолютные пути ко всем файлам в дереве, а вторая накладывает водяной знак. И в аккуратном цикле вызывает вторую для результатов первой.
Самый простой сценарий для проверки контроллера на излишний вес я нашел здесь:
Ну вот, теперь по крайней мере честно.
Ваша бравада эмоционально оправдана, но со стороны смотрится жалко. Звучит это всё, как "Я не профессионал, я любитель. И поэтому я чихал на традиционные представления, что дважды два равно четыре. У меня будет 7!". И с таким отношением вы никогда не дойдете до квадратных уравнений.
Ой, зря вы взяли этот обиженный тон.
Поймите, ваш код говорит о себе куда больше, чем вы хотели бы сказать оправданиями про "реальный код, в котором все правильно".
Добавления палочки со стрелочкой к вызову функции тоже недостаточно. Оно не делает ваш код объектно-ориентированным, а работу с БД менее унылой.
И ваша реакция на совершенно справедливое замечание о нормализации БД в комментарии выше — это тоже очень, очень печально.
Не стыдно чего-то не знать. Стыдно принимать в штыки критику и отказываться учиться.
Году в 2008 вас бы похвалили за такой код.
Судя по оговоркам ("В качестве СУБД я использую расширение MySQLi", "законодательство, обязывающее хранить информацию о пользователях не менее полугода" в контексте обсуждения автоинкремента и пр.) — вы начинающий программист. Если поставите себе целью подтянуть код до современных стандартов, то через пару лет у вас получится то, что не стыдно показать широкой аудитории.
Сейчас же, уж извините, у вас старый добрый спгетти-код, даром что завернутый в класс. В одну кучу смешались SQL, HTTP, файловая система. Никакой абстракции, никакого разделения ответственности. Обработка ошибок где-то лишняя ('cannot make dir: ' ), где-то отсутствует совсем (mysqli), где-то однозначно вредная (echo $e->getMessage();).
В качестве работы над ошибками попробуйте сделать отдельные сервисы для работы с БД и HTTP. Для работы с таблицей файлов в БД также нужен будет отдельный класс. И ради бога, забудьте уже этот чудовищный mysql_query стайл. А то получается как в анекдоте — "ложечку вынул, а глаз все равно зажмуриваешь". Буковку i к вызовам функций приписал, а все остальное осталось как прежде.
В итоге вместо ручного колупания с SQL должно получиться что-то вроде
В конкретной реализации тоже много странного (непонятно, зачем отдельный запрос для сохранения хэшей и размера файла; непонятно, почему логика получения файла сделана в РНР, а не в БД, почему вообще по одному и тому же url может оказаться больше одного файла и пр.) но это уже мелочи по сравнению со структурными проблемами.
Я просто ничего другого вообще предположить не могу :)
Проект вызывает смешанные чувства.
Вызывают уважение энтузиазм и предполагаемая цель (обучение школьников, если я правильно понимаю).
Всё остальное, начиная с технических аспектов реализации — очень плохо.
Риторика "Сделано в России" явно осталась от репортажа в районной многотиражке, где она смотрелась уместно, но выглядит дико при публикации на техническом ресурсе.
Логика при оценке собственного продукта у автора отказывает начисто
— это что вообще? Как связаны востребованность продукта и самопальность инструмента разработки?
Я просто оставлю это здесь
https://www.youtube.com/watch?v=tfRSvTSY0d4
Нововведения?
Исходная статья полезная, но пожалуйста, если русский язык для вас родной, вычитайте этот текст на свежую голову, и исправьте хотя бы согласование членов предложения. Глаза болят читать все эти "жонглирование типа", "поддержку, которое". Про смысловые ляпы я уж молчу. Понять смысл предложения "Это может пригодиться, когда вы понимаете, как происходят преобразования" можно только мысленно переведя обратно на английский.
Если же не родной, то, возможно, вам пока рано заниматься переводами на русский.
Я думаю что Хабр — не очень подходит для такой дискуссии. Тостер или пхпклуб или реддит подойдут больше.
Но в любом случае надо гораздо четче формулировать свои мысли — как предпосылки, так и предложения.
Если честно, то я ничего не понял.
Речь идет о запрещении использования $_GLOBALS и global?
Три куцых абзаца после многообещающего спойлера "давайте заглянем внутрь" вызывают недоумение.
"Рецензия" написана левой пяткой за 5 минут, даже фамилия автора книги не указана. По стилю это фактически коммент в ВК, а не публикация на Хабре. Или — даже скорее — платные отзывы на Маркете.
Речь не про язык, а про статью, которую вы переводили.
Для вашего удобства я цитировал ранее предложение из неё, с которым я не согласен.
...
"У Рабиновича было собственное мнение, но он его категорически не разделял" :)
Боюсь, вы не совсем поняли статью, которую переводили.
Для вашего удобства я выше процирировал код из неё.
Дадад, и писать каждый раз эту колбасу
вместо
f<tab>myMethod()это два нажания клавиши.Вы счастливый человек, что основное время при разработке у вас занимает написание кода, а не размышления, какой именно код написать. И экономия нажатия двух кнопок значительно повычит скорость разработки.
Об этом и речь. Банальный lazy load преподносится в 1С как космическая технология.
В доктрине это все есть