Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Фишки, которые способствуют развитию PHP

Здесь обсуждается процесс определения наиболее востребованных и ожидаемых возможностей в PHP, которые стимулируют проекты переходить на более современные версии языка. Для этого проводится аудит и линтинг 51 современного проекта на PHP 8.0 и 7.4. Затем анализируются ошибки синтаксиса, возникающие при использовании новых фишек на старых версиях PHP.

Общая совместимость с PHP 7.4 и 8.0 также была оценена. Оказалось, что около 35% проектов поддерживают совместимость с PHP 7.4, а примерно 40% — с PHP 8.0. Остальные проекты имеют определенные проблемы с совместимостью, что может занимать до 14% кодовой базы.

Наиболее часто используемые возможности в PHP 8.0 включают enum (45%), readonly свойства (35%), callable (22%), intersectional type (22%) и другие.

В PHP 7.4 самыми популярными оказались promoted properties (66%), named parameters (42%), throw as expression (27%) и mixed type (24%).

Исследование позволяет выявить, какие функции в PHP являются наиболее важными и ожидаемыми для разработчиков, и какие из них могут стимулировать переход на более современные версии языка.
👍92🥱1
#дайджест #phpdevjob

Вакансии PHP разработчиков уровня Junior

▪️PHP-программист
Москва. РусВент — производственная компания
Подробнее

▪️PHP-программист
Москва. Флюид-Лайн — поставки промышленного оборудования
Подробнее

Вакансии PHP разработчиков уровня Middle

▪️Web - разработчик
Москва. TBG Computers — крупнейший ритейлер по продаже ноутбуков
Подробнее

▪️Разработчик PHP
Москва. Восток.Софт — разработка ПО
Подробнее

Вакансии PHP разработчиков уровня Senior

▪️Senior PHP Developer
Москва. Курьерист — курьерская служба
Подробнее

▪️PHP developer
Санкт-Петербург. ОРЦ — международная компания-разработчик нестандартных платёжных решений
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
7🤔4
Моя слабая сторона это...
🎉4
Убедитесь, что режим отладки Laravel отключен в рабочей среде.

Статья обсуждает важность безопасности при разработке приложений на Laravel и как можно использовать инструменты, такие как пакет spatie/laravel-health и сервис Oh Dear, чтобы обеспечить безопасность приложения. Особое внимание уделяется угрозе, связанной с включением режима отладки (APP_DEBUG) в Laravel, что может привести к раскрытию конфиденциальной информации и отключению некоторых функций безопасности.

Предложены следующие шаги для обеспечения безопасности:

Установка Laravel Health в приложение Laravel: Пакет spatie/laravel-health позволяет отслеживать состояние здоровья вашего приложения, включая режим отладки.

Добавление проверки состояния здоровья в приложение: Это позволяет Oh Dear отправлять уведомления в случае изменения значения APP_DEBUG.

Создание конечной точки для проверки состояния здоровья в вашем приложении: Это необходимо для Oh Dear, чтобы проверить состояние вашего приложения.

Конфигурирование проверки состояния здоровья в Oh Dear: Настройка URL-адреса и секретного ключа для взаимодействия с вашим приложением.

Завершение напоминает о том, что Oh Dear также предлагает проверку запланированных задач и что использование таких инструментов помогает обнаруживать различные проблемы в работе приложения, а не только включение режима отладки.
4🥱4
Что вам известно о шаблонах, которые применяются в ORM?

В контексте Object-Relational Mapping (ORM), шаблоны (или паттерны) играют важную роль в проектировании и организации работы с базой данных. Вот несколько распространенных шаблонов, используемых в ORM:

Шаблон ActiveRecord: Этот шаблон описывает объект, который инкапсулирует как данные, так и поведение для работы с этими данными. Обычно каждая запись в базе данных представляется объектом ActiveRecord. Он обеспечивает прямое соответствие между объектами и записями в базе данных.

Шаблон Repository: Repository предоставляет абстракцию для работы с коллекциями объектов. Он предоставляет методы для поиска, сохранения, удаления и запросов к данным. Репозиторий инкапсулирует логику доступа к данным и предоставляет интерфейс для работы с этими данными.

Шаблон Identity Map: Этот шаблон обеспечивает глобальное отображение идентичности объектов в приложении. Он гарантирует, что каждый объект в приложении имеет только один экземпляр в памяти, даже если он загружен из базы данных несколько раз. Это помогает избежать проблем с непоследовательностью данных и улучшает производительность.

Шаблон Unit of Work: Этот шаблон отслеживает изменения, сделанные с объектами в рамках одной транзакции базы данных. Он обеспечивает согласованность данных и управляет коммитом или откатом изменений. Шаблон Unit of Work также может использоваться для оптимизации работы с базой данных, пакетного сохранения изменений и управления транзакциями.

Эти шаблоны предоставляют средства для упрощения работы с базой данных в объектно-ориентированных приложениях, обеспечивая гибкость, производительность и согласованность данных. Их использование позволяет разработчикам эффективно работать с данными и минимизировать повторение кода.

#вопросы_с_собеседований
21👍5
Асинхронный конечный автомат с Symfony Workflows

Статья описывает применение Symfony Workflow компонента для управления сложной бизнес-логикой, используя концепцию конечного автомата (finite-state machine). Рассматривается использование компонента на примере рабочего процесса создания и обработки заказа, который включает этапы создания заказа, отправки его в службу заказов, отправки на электронную почту пользователю и отметки заказа как «отправленного» в базе данных.

Здесь предлагается подход, при котором каждый этап бизнес-процесса разбивается на отдельные транзакции конечного автомата. Эти транзакции выполняются транзакционно, что обеспечивает надежность и целостность данных. Если одна из транзакций завершается неудачно, предусмотрена возможность повторного выполнения позже.

Применение событий и подписчиков позволяет управлять процессом и обрабатывать каждую транзакцию транзакционно, что обеспечивает надежность и отказоустойчивость системы.

Также здесь рассматривается сценарий сбоя в работе, описывая методы обработки ошибок и возможности повторного запуска процесса после временных сбоев.
10🔥3🤔2
Механизмы безопасности в Laravel

В Laravel существуют различные механизмы безопасности, которые часто не получают достаточного внимания.

Здесь рассматриваются следующие механизмы безопасности:

1️⃣Предотвращение проблемы N+1.
2️⃣Защита от частично гидрированных моделей.
3️⃣Защита от опечаток в атрибутах и переименованных столбцах.
4️⃣Защита от массового присвоения.
5️⃣Строгость модели.
6️⃣Принудительное наложение полиморфного отображения.
7️⃣Мониторинг долгих событий.

Каждый из этих механизмов обсуждается в контексте его конфигурации и советов по тому, как и когда его использовать.
👍94🌚1
💬 Оцените свой профессиональный рост за последний год

❤️ — сильно вырос как специалист
👍 — не заметил сильного роста, всё стабильно
🤔 — есть ощущение, что я даже кое-что стал забывать

#интерактив
76🤔55👍53🔥2
Хранение классов с настраиваемыми параметрами в базе данных

Статья обсуждает проблему хранения абстракций определенных классов в базе данных, совместно с конфигурируемыми пользовательскими входными данными, для последующего создания экземпляров соответствующих классов с правильными параметрами. Начинается с рассмотрения первоначального подхода через сериализацию, но выявляет недостатки, такие как сложность обновления параметров и жестко закодированное пространство имен.

Далее предлагается улучшенный подход, основанный на хранении только имени класса и JSON-закодированного массива параметров, а также использовании статического метода создания для инициализации экземпляров классов с правильными параметрами. Для разрешения пространства имен используются перечисления (enums). Данные хранятся в столбце JSON базы данных, и для их извлечения используется метод модели. В конце автор обсуждает возможные альтернативные подходы и признает, что может быть затрачено слишком много времени на решение проблемы, но находит свое решение достаточно удовлетворительным.
👍31🤔1
#дайджест новостей по PHP за неделю:

🔎Вышел PHP 8.2.16 — Это релиз с исправлением ошибок. Всем пользователям PHP 8.2 рекомендуется выполнить обновление до этой версии.

🔎Выпущен PHP 8.3.3 — Аналогично, это баг-фикс, и всем пользователям 8.3 также рекомендуется выполнить обновление

🔎Неделя Symfony № 894 (12–18 февраля 2024 г.)

🔎Новые приложения Laravel 11 включают точку проверки работоспособности — В рамках выпуска Laravel 11 новые приложения включают конечную точку работоспособности/работы. Этот маршрут определяется в новом файле bootstrap/app.php путем передачи параметра Health, который по умолчанию определен в скелете Laravel 11.

🔎Потоковые ответы JSON добавлены в Laravel 10.43 — Команда Laravel выпустила версию 10.43 с поддержкой потоковых ответов JSON, передачей имени класса для регистрации глобальной области Eloquent, новым методом Eloquent InsertOrIgnoreUsing и многим другим.
🔥6🎉2
Практическое руководство по более чистым контроллерам Laravel: использование возможностей средств доступа(accessors) и мутаторов

Очень важно использовать контроллеры в Laravel в соответствии с архитектурным шаблоном Model-View-Controller (MVC). Основная задача контроллеров в Laravel — управление HTTP-запросами пользователей, рендеринг представлений и взаимодействие с моделями приложения для модификации данных. Поддержание MVC-шаблона при разработке приложения на Laravel обеспечивает поддержку кода и его повторное использование.

Контроллеры в Laravel должны быть сконцентрированы на обработке HTTP-запросов и управлении потоком приложения, в то время как бизнес-логика должна быть размещена в модели или сервисах для более чистого и организованного кода.

🚀 Практический пример использования контроллера:
Приводится практический пример использования контроллера в Laravel, сравнивая его с ролью Corporate Controller в отрасли бухгалтерии. Контроллер в Laravel играет ключевую роль в управлении потоком и обработкой запросов в приложении, аналогично тому, как Corporate Controller управляет финансовыми аспектами.

🧩 Использование accessors и mutators:
Accessors используются для форматирования атрибутов при получении из базы данных.
Mutators используются для модификации атрибутов перед сохранением в базе данных.

🌟 Преимущества использования accessors и mutators:
Поддержка и читаемость кода.
Повторное использование и тестирование кода.
3👍3🥰1🎉1
Улучшение кода без споров и цитирования известных практик

Не секрет, что при формировании новой команды руководители (Team Leader, Tech Leader) сталкиваются с проблемой формирования единого стиля написания программ, так как все члены команды новые, и у каждого из них свой подход к организации кода и выбору используемой практики. Как правило, в большинстве случаев это приводит к длинным диспутам на ревью, которые в итоге перетекают в различные толкования известных практик, таких как SOLID, KISS, DRY, и т.д. Принципы использования этих практик довольно размыты и, при должном упорстве, легко найти парадокс, когда одна из них противоречит другой.

Здесь предлагается подход, позволяющий избежать большинство подобных спорных ситуаций. Более того, каждый разработчик на практике (и без замечаний со стороны руководителя) будет понимать, что именно он делает неправильно и как можно сделать лучше.
👍4🥱31🥰1
Что такое функции soundex() и metaphone() в PHP?

Функция soundex():
Функция soundex() вычисляет звуковой индекс строки.
Soundex — это фонетический алгоритм, который назначает код слову на основе его произношения.
Он применяется преимущественно для поиска слов, которые звучат похоже, но могут быть написаны по-разному.
Функция сокращает слова до четырехсимвольного кода, который представляет его звучание.
Это полезно для задач, таких как поиск имен, которые звучат похоже, но имеют разные написания.

Функция metaphone():
Функция metaphone() вычисляет метафонический ключ строки.
Metaphone — это еще один фонетический алгоритм, но он более продвинут, чем Soundex.
Он преобразует слово в фонетический ключ, состоящий из одной или нескольких букв.
В отличие от Soundex, Metaphone учитывает вариации произношения и более эффективен для английских слов.

#вопросы_с_собеседований
👍22🤔111
DTO vs VO в PHP

DTO (Data Transfer Object) и VO (Value Object) — это два шаблона проектирования, которые полезны для улучшения качества кода и его читаемости в PHP.

DTO представляют собой объекты, содержащие данные и определяющие структуру этих данных. Они полезны для передачи данных между различными частями приложения, например, при обработке HTTP-запросов.

VO представляют собой объекты, которые обеспечивают гарантию корректности данных, содержащихся в них. Они полезны для представления значений, специфичных для домена приложения, и применения бизнес-правил.

DTO используются там, где данные входят или выходят из приложения, например, при обработке HTTP-запросов или ответов на них.

VO используются для проверки корректности значений и применения к ним бизнес-правил, например, для представления цен или email-адресов.

Оба шаблона помогают сделать код более чистым, понятным и уменьшить вероятность ошибок.
👍151
Как ошибки проектирования при разработке на Symfony могут привести к перерасходу ресурсов и замедлению работы системы

Здесь обсуждаются ошибки, допущенные на начальных этапах создания проекта электронной коммерции, и способы их исправления, что привело к значительному снижению потребления памяти и нагрузки на дисковую систему.

1️⃣Первая ошибка заключалась в том, что при хранении данных сессий пользователей в Redis, объекты сессий содержали в себе много лишней информации, включая все выданные токены доступа. Это привело к избыточному потреблению памяти и увеличению нагрузки на дисковую систему.

2️⃣Вторая ошибка заключалась в том, что не была реализована функция удаления старых токенов доступа, что привело к накоплению большого количества устаревших данных в базе данных.

3️⃣Третья ошибка состояла в том, что не был активирован режим без сохранения состояния для одного из API, что привело к ненужному созданию новых сессий при каждом запросе и увеличению нагрузки на систему.

Для решения проблем были предприняты следующие шаги:

🟢Переписана система выдачи токенов доступа, чтобы в базе данных хранились только актуальные токены.
🟢Убрана связь между токенами доступа и объектами пользователей.
🟢Активирован режим без сохранения состояния для соответствующего API.

Кроме того, из этого опыта можно выделить несколько уроков, включая необходимость наличия системы мониторинга, аккуратность при разработке под давлением сжатых сроков, и важность командной работы для предотвращения ошибок.
😁4🌚4👍3
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🎉1
Использование интерфейсов в сторонних пакетах

Здесь читателям предлагается использовать интерфейсы вместо конкретных классов или перечислений для создания более гибких и расширяемых API в PHP. Начиная с введения перечислений в PHP 8.1, они могут быть удобны для представления ограниченного набора опций. Однако, если требуется более гибкий и расширяемый подход, рекомендуется использовать интерфейсы.

Преимущества такого подхода заключается в loose coupling между компонентами и возможности расширения функционала как для разработчиков пакета, так и для пользователей.
👍3