🐳 Подборка шпаргалок по Docker: на заметку разработчику
Всем привет!
Мы ищем участников для интервью на тему «Обучение навыкам в IT»!
Кто нам нужен?
✅ Вы недавно (в последние 6 месяцев) проходили курсы по техническим специальностям или математике.
✅ Вы разработчик, стремящийся освоить Data Science или Machine Learning.
Что вас ждет?
Участие в интервью по Zoom, которое займет не больше 45 минут.📞
🤑 1500 рублей на карту за ваше время.
Уникальный шанс пообщаться с нашим CEO!😎
Как откликнуться?
✏️Напишите в личные сообщения @artem_ceo
Мы ищем участников для интервью на тему «Обучение навыкам в IT»!
Кто нам нужен?
✅ Вы недавно (в последние 6 месяцев) проходили курсы по техническим специальностям или математике.
✅ Вы разработчик, стремящийся освоить Data Science или Machine Learning.
Что вас ждет?
Участие в интервью по Zoom, которое займет не больше 45 минут.📞
🤑 1500 рублей на карту за ваше время.
Уникальный шанс пообщаться с нашим CEO!😎
Как откликнуться?
✏️Напишите в личные сообщения @artem_ceo
Почему финальные классы делают Rector и PHPStan более сильными
Добавление ключевого слова
Проблемы классов без final
Когда классы не объявлены как
⚠️ Такие классы могут быть унаследованы, а методы переопределены, что усложняет анализ и изменение кода.
⚠️ Возникает страх модификации: разработчики не уверены, что изменения не приведут к сбоям в дочерних классах.
⚠️ Итогом становится отказ от улучшений кода, который превращается в трудно поддерживаемую «наследственную» базу.
Преимущества final
Объявление класса как final позволяет:
✅ Упростить анализ кода. Инструменты вроде PHPStan и Rector могут точно определить, что класс не будет унаследован, а методы не будут изменены.
✅ Удалить неиспользуемый код. Приватные методы, которые нигде не вызываются, можно безопасно удалить.
✅ Повысить безопасность. Можно без риска добавлять типы возвращаемых значений и параметров, так как они не повлияют на дочерние классы (их просто не существует).
✅ Снизить вероятность ошибок. Четкие границы использования класса исключают непредвиденное поведение.
Как это меняет подход к разработке?
Добавление final делает работу с кодом более уверенной и предсказуемой:
🛠️ Класс воспринимается как законченная, независимая сущность, которую можно модифицировать без страха.
🛠️ Легче находить и устранять устаревший или лишний код.
🛠️ Инструменты автоматически предлагают улучшения, которые делают код чище и проще.
Простое внедрение final в проект
Для упрощения перехода на final можно использовать инструменты автоматизации, такие как Rector. Они позволяют добавлять
🧪 Пробное добавление
🧪 Проверку кода с помощью статического анализа.
🧪 Автоматическое исправление кода, если это необходимо.
Все изменения можно сохранить или откатить при необходимости.
Добавление ключевого слова
final
в классы PHP помогает улучшить архитектуру кода, повысить его качество и упростить сопровождение. Этот подход стимулирует переход от наследования к композиции, снижает вероятность ошибок и делает рефакторинг менее рискованным. Рассмотрим, почему использование final
так важно.Проблемы классов без final
Когда классы не объявлены как
final
, появляется множество неопределенностей:⚠️ Такие классы могут быть унаследованы, а методы переопределены, что усложняет анализ и изменение кода.
⚠️ Возникает страх модификации: разработчики не уверены, что изменения не приведут к сбоям в дочерних классах.
⚠️ Итогом становится отказ от улучшений кода, который превращается в трудно поддерживаемую «наследственную» базу.
Преимущества final
Объявление класса как final позволяет:
✅ Упростить анализ кода. Инструменты вроде PHPStan и Rector могут точно определить, что класс не будет унаследован, а методы не будут изменены.
✅ Удалить неиспользуемый код. Приватные методы, которые нигде не вызываются, можно безопасно удалить.
✅ Повысить безопасность. Можно без риска добавлять типы возвращаемых значений и параметров, так как они не повлияют на дочерние классы (их просто не существует).
✅ Снизить вероятность ошибок. Четкие границы использования класса исключают непредвиденное поведение.
Как это меняет подход к разработке?
Добавление final делает работу с кодом более уверенной и предсказуемой:
🛠️ Класс воспринимается как законченная, независимая сущность, которую можно модифицировать без страха.
🛠️ Легче находить и устранять устаревший или лишний код.
🛠️ Инструменты автоматически предлагают улучшения, которые делают код чище и проще.
Простое внедрение final в проект
Для упрощения перехода на final можно использовать инструменты автоматизации, такие как Rector. Они позволяют добавлять
final
только там, где это безопасно: для классов без наследников и моков. Процесс включает:🧪 Пробное добавление
final
ко всем подходящим классам.🧪 Проверку кода с помощью статического анализа.
🧪 Автоматическое исправление кода, если это необходимо.
Все изменения можно сохранить или откатить при необходимости.
Tomasvotruba
Why Final Classes make Rector and PHPStan more powerful
Final classes bring much more value than `extends` it lacks. It teaches composition over inheritance, makes upgrades easier, and [even mocking](/blog/2019/03/28/how-to-mock-final-classes-in-phpunit) is fine.
If you're lazy like me, you can [automate the…
If you're lazy like me, you can [automate the…
Taran — инструмент нагрузочного тестирования
Простой инструмент для нагрузочного тестирования веб-приложений.
Написан на PHP 8.1+ с использованием консольного фреймворка Laravel Zero.
🔗 GitHub
#библиотека
Простой инструмент для нагрузочного тестирования веб-приложений.
Написан на PHP 8.1+ с использованием консольного фреймворка Laravel Zero.
🔗 GitHub
#библиотека
GitHub
GitHub - maximal/taran: Web applications and servers benchmarking tool.
Web applications and servers benchmarking tool. Contribute to maximal/taran development by creating an account on GitHub.
Какая система типов используется в PHP? Опишите плюсы и минусы.
В PHP используется динамическая система типов, что означает, что тип переменной определяется во время выполнения программы и может изменяться в процессе работы. Вот некоторые плюсы и минусы такой системы типов:
Плюсы:
✔️Гибкость: Динамическая типизация делает PHP очень гибким языком программирования, позволяя быстро писать и изменять код.
✔️Простота использования: Не нужно явно объявлять типы переменных, что упрощает написание кода, особенно для новичков.
✔️Легкость внесения изменений: Поскольку типы переменных могут быть изменены в любой момент, изменение структуры данных или логики программы может быть более легким и менее разрушительным.
✔️Меньше кода: Нет необходимости явно приводить типы или выполнять проверки на соответствие типов, что может сократить объем кода.
Минусы:
❗Потенциальные ошибки времени выполнения: Поскольку типы определяются во время выполнения, ошибки, связанные с несоответствием типов, могут возникнуть только во время выполнения программы, что может затруднить их обнаружение и отладку.
❗Уменьшение производительности: Проверка типов во время выполнения может негативно сказаться на производительности приложения, особенно в больших и сложных проектах.
❗Меньшая надежность: Поскольку типы переменных могут изменяться во время выполнения, это может привести к неожиданному поведению программы и усложнить ее понимание и поддержку.
❗Трудности в документации и отладке: Из-за динамической типизации может быть сложно определить типы переменных и их ожидаемое поведение, что может затруднить документирование кода и отладку ошибок.
#вопросы_с_собеседований
В PHP используется динамическая система типов, что означает, что тип переменной определяется во время выполнения программы и может изменяться в процессе работы. Вот некоторые плюсы и минусы такой системы типов:
Плюсы:
✔️Гибкость: Динамическая типизация делает PHP очень гибким языком программирования, позволяя быстро писать и изменять код.
✔️Простота использования: Не нужно явно объявлять типы переменных, что упрощает написание кода, особенно для новичков.
✔️Легкость внесения изменений: Поскольку типы переменных могут быть изменены в любой момент, изменение структуры данных или логики программы может быть более легким и менее разрушительным.
✔️Меньше кода: Нет необходимости явно приводить типы или выполнять проверки на соответствие типов, что может сократить объем кода.
Минусы:
❗Потенциальные ошибки времени выполнения: Поскольку типы определяются во время выполнения, ошибки, связанные с несоответствием типов, могут возникнуть только во время выполнения программы, что может затруднить их обнаружение и отладку.
❗Уменьшение производительности: Проверка типов во время выполнения может негативно сказаться на производительности приложения, особенно в больших и сложных проектах.
❗Меньшая надежность: Поскольку типы переменных могут изменяться во время выполнения, это может привести к неожиданному поведению программы и усложнить ее понимание и поддержку.
❗Трудности в документации и отладке: Из-за динамической типизации может быть сложно определить типы переменных и их ожидаемое поведение, что может затруднить документирование кода и отладку ошибок.
#вопросы_с_собеседований
Статистика версий PHP: январь 2025 г.
Регулярный обзор используемых версий PHP на основе данных, которые клиенты отправляют на packagist.org (например, когда они запускают composer
Основные моменты, охваченные в статистике, включают:
Использование версий PHP (Packagist, январь 2025):
🔹 PHP 7.4: Снижение с 19.9% (июль 2023) до 7.6%.
🔹 PHP 8.0: Уменьшение до 3.4%.
🔹 PHP 8.1: Лидирует, но падает до 18.1%.
🔹 PHP 8.2: Второе место — 28.6%.
🔹 PHP 8.3: Резкий рост до 32.7%.
🔹 PHP 8.4: Новый релиз, 5.1% использования спустя месяц.
Принятие новых версий (первый месяц):
✨ PHP 8.1: 9.1% (лучший результат).
✨ PHP 8.4: 5.1%, чуть ниже среднего (новые функции, но медленное принятие).
Минимальные версии PHP для популярных пакетов:
🛠 PHP 8.0 и новее: Рост минимальных требований к 8.1 (194 пакета) и 8.2 (171 пакета).
🛠 PHP 7.4 и старше: Постепенный спад, но ещё широко поддерживаются.
Тренды и выводы:
📉 Использование старых версий (7.x) продолжает снижаться, но они всё ещё встречаются.
📈 Пакеты всё чаще требуют современные версии PHP (8.x).
🚀 Новые версии, особенно 8.3 и 8.4, быстрее адаптируются благодаря улучшениям инструментов обновления.
Регулярный обзор используемых версий PHP на основе данных, которые клиенты отправляют на packagist.org (например, когда они запускают composer
update
команду).Основные моменты, охваченные в статистике, включают:
Использование версий PHP (Packagist, январь 2025):
🔹 PHP 7.4: Снижение с 19.9% (июль 2023) до 7.6%.
🔹 PHP 8.0: Уменьшение до 3.4%.
🔹 PHP 8.1: Лидирует, но падает до 18.1%.
🔹 PHP 8.2: Второе место — 28.6%.
🔹 PHP 8.3: Резкий рост до 32.7%.
🔹 PHP 8.4: Новый релиз, 5.1% использования спустя месяц.
Принятие новых версий (первый месяц):
✨ PHP 8.1: 9.1% (лучший результат).
✨ PHP 8.4: 5.1%, чуть ниже среднего (новые функции, но медленное принятие).
Минимальные версии PHP для популярных пакетов:
🛠 PHP 8.0 и новее: Рост минимальных требований к 8.1 (194 пакета) и 8.2 (171 пакета).
🛠 PHP 7.4 и старше: Постепенный спад, но ещё широко поддерживаются.
Тренды и выводы:
📉 Использование старых версий (7.x) продолжает снижаться, но они всё ещё встречаются.
📈 Пакеты всё чаще требуют современные версии PHP (8.x).
🚀 Новые версии, особенно 8.3 и 8.4, быстрее адаптируются благодаря улучшениям инструментов обновления.
✅Автозаполнение вводимых команд в Laravel
При создании опций для CLI-приложений вы можете улучшить UX, реализовав автозаполнение для пользователя. Это можно сделать с помощью метода
#совет
При создании опций для CLI-приложений вы можете улучшить UX, реализовав автозаполнение для пользователя. Это можно сделать с помощью метода
anticipate
, предоставляемого Laravel 🚀#совет
🔍 Can I PHP: проверяем доступность фичи налету
Расширение позволяет проверить доступность определенной функции/метода в различных версиях PHP и получить краткое описание возможностей.
👉 Сайт
#инструменты
Расширение позволяет проверить доступность определенной функции/метода в различных версиях PHP и получить краткое описание возможностей.
👉 Сайт
#инструменты
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #PHPdevjob
Вакансии PHP разработчиков уровня Junior
▪️ PHP разработчик
Офис (Новосибирск), SIBERS
Подробнее
▪️ PHP разработчик
Гибрид (Санкт-Петербург), Глолайм
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️ PHP разработчик
Удалёнка / Офис (Казань), Living Core
Подробнее
▪️ PHP разработчик
Удалёнка, Marfatech
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️ Разработчик PHP
Гибрид (Москва) / Удалёнка, СИГМА
Подробнее
▪️ PHP разработчик (Symfony)
Удалёнка, АльфаСтрахование
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️ PHP разработчик
Офис (Новосибирск), SIBERS
Подробнее
▪️ PHP разработчик
Гибрид (Санкт-Петербург), Глолайм
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️ PHP разработчик
Удалёнка / Офис (Казань), Living Core
Подробнее
▪️ PHP разработчик
Удалёнка, Marfatech
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️ Разработчик PHP
Гибрид (Москва) / Удалёнка, СИГМА
Подробнее
▪️ PHP разработчик (Symfony)
Удалёнка, АльфаСтрахование
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
novosibirsk.hh.ru
Вакансия Junior PHP Developer в Новосибирске, работа в компании SIBERS (вакансия в архиве c 13 февраля 2025)
Зарплата: не указана. Новосибирск. Требуемый опыт: не требуется. Полная. Дата публикации: 10.02.2025.
👨💻 Пусть Т9 продолжит фразу за вас:
Как же меня бесит в IT...
Как же меня бесит в IT...
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
🕧 Название инструмента: генерим одноразовые пароли в Laravel для входа в систему
Пакет предоставляет безопасный одноразовый пароль (One Time Password, OTP) по электронной почте пользователя.
🎯 Основные возможности:
— контроль трафика;
— настраиваемый срок действия;
— Недействителен после первого использования
— Заблокирован на сессии пользователя
— Признание недействительным после слишком большого количества неудачных попыток
— Подробные сообщения об ошибках
— Настраиваемый шаблон письма
— Проверяемые логи
🔗 Ссылка на Гитхаб
#инструменты
Пакет предоставляет безопасный одноразовый пароль (One Time Password, OTP) по электронной почте пользователя.
🎯 Основные возможности:
— контроль трафика;
— настраиваемый срок действия;
— Недействителен после первого использования
— Заблокирован на сессии пользователя
— Признание недействительным после слишком большого количества неудачных попыток
— Подробные сообщения об ошибках
— Настраиваемый шаблон письма
— Проверяемые логи
🔗 Ссылка на Гитхаб
#инструменты
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Какова разница между «регулярным выражением» и «выражением с подстановочными символами» в PHP, и как их использовать?
В PHP «регулярные выражения» и «выражения с подстановочными символами» служат похожим целям, но имеют некоторые различия в синтаксисе и функциональности.
Регулярные выражения:
Регулярные выражения (regex) — это мощные инструменты для поиска шаблонов и манипуляции текстом.
Они позволяют определять сложные шаблоны поиска с использованием формального синтаксиса.
Шаблоны regex могут соответствовать определенным символам, диапазонам символов, повторениям, альтернативам и т. д.
PHP предоставляет встроенные функции, такие как
Регулярные выражения более гибкие и универсальные по сравнению с выражениями с подстановочными символами.
Выражения с подстановочными символами:
Выражения с подстановочными символами проще и более ограниченные по сравнению с регулярными выражениями.
Они используют специальные символы, такие как * (соответствует нулю или более символам) и ? (соответствует ровно одному символу), для представления шаблонов.
Выражения с подстановочными символами часто используются при операциях с файловой системой, таких как поиск файлов по их именам.
PHP предоставляет функции, такие как
В PHP «регулярные выражения» и «выражения с подстановочными символами» служат похожим целям, но имеют некоторые различия в синтаксисе и функциональности.
Регулярные выражения:
Регулярные выражения (regex) — это мощные инструменты для поиска шаблонов и манипуляции текстом.
Они позволяют определять сложные шаблоны поиска с использованием формального синтаксиса.
Шаблоны regex могут соответствовать определенным символам, диапазонам символов, повторениям, альтернативам и т. д.
PHP предоставляет встроенные функции, такие как
preg_match()
, preg_match_all()
, preg_replace()
и т. д., для работы с регулярными выражениями.Регулярные выражения более гибкие и универсальные по сравнению с выражениями с подстановочными символами.
Выражения с подстановочными символами:
Выражения с подстановочными символами проще и более ограниченные по сравнению с регулярными выражениями.
Они используют специальные символы, такие как * (соответствует нулю или более символам) и ? (соответствует ровно одному символу), для представления шаблонов.
Выражения с подстановочными символами часто используются при операциях с файловой системой, таких как поиск файлов по их именам.
PHP предоставляет функции, такие как
glob()
, для работы с выражениями с подстановочными символами при операциях с файловой системой.Уязвимость Host Header Injection: Риски и Способы Защиты в Laravel
Host Header Injection — это уязвимость, возникающая, когда веб-приложение доверяет заголовку Host, полученному в HTTP-запросах, без проверки. Это может привести к ряду опасных сценариев:
🔸Перенаправление пользователей на вредоносные сайты.
🔸Подделка ссылок для сброса пароля.
🔸Манипуляции с поведением сервера.
Как это проявляется в приложениях Laravel?
Если Laravel-приложение использует заголовок Host для принятия критически важных решений без проверки, это создает серьезный риск.
В первом примере ссылка для сброса пароля формируется напрямую из заголовка Host. Злоумышленник может отправить запрос с поддельным заголовком.
Как защитить Laravel-приложение от Host Header Injection?
1. Проверка заголовка Host
Вместо использования заголовка Host используйте переменную
2. Ограничение доверенных хостов
Используйте middleware
3. Корректная настройка APP_URL
Убедитесь, что в файле .env указано правильное значение:
Проверка на уязвимость
Для проверки приложения на уязвимость можно использовать бесплатные инструменты для анализа безопасности.
Host Header Injection — это уязвимость, возникающая, когда веб-приложение доверяет заголовку Host, полученному в HTTP-запросах, без проверки. Это может привести к ряду опасных сценариев:
🔸Перенаправление пользователей на вредоносные сайты.
🔸Подделка ссылок для сброса пароля.
🔸Манипуляции с поведением сервера.
Как это проявляется в приложениях Laravel?
Если Laravel-приложение использует заголовок Host для принятия критически важных решений без проверки, это создает серьезный риск.
В первом примере ссылка для сброса пароля формируется напрямую из заголовка Host. Злоумышленник может отправить запрос с поддельным заголовком.
Как защитить Laravel-приложение от Host Header Injection?
1. Проверка заголовка Host
Вместо использования заголовка Host используйте переменную
APP_URL
из файла конфигурации .env
2. Ограничение доверенных хостов
Используйте middleware
trustedproxies
, чтобы разрешить запросы только с доверенных хостов. В файле config/trustedproxy.php
настройте параметр host
3. Корректная настройка APP_URL
Убедитесь, что в файле .env указано правильное значение:
APP_URL=https://yourdomain.com
Проверка на уязвимость
Для проверки приложения на уязвимость можно использовать бесплатные инструменты для анализа безопасности.