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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Что такое функции 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
#дайджест #phpdevjob

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

▪️Веб-разработчик
Тула. ИнтерЛабс — интернет-маркетинговое агентство полного цикла
Подробнее

▪️Стажер-разработчик PHP
Ульяновск. FrameWork Team — аутсорс-разработка
Подробнее

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

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

▪️PHP разработчик
Москва. Мой Самокат — сервис, специализирующийся на аренде девайсов по системе подписки
Подробнее

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

▪️Senior PHP developer
Москва. СЕЙЧАС — информационные технологии, системная интеграция
Подробнее

▪️Старший PHP-программист
Москва. Автоспот — сервис продажи авто
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
😁102🤔1
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
В чем разница между функциями «htmlentities» и «htmlspecialchars» в PHP?

В PHP функции «htmlentities()» и «htmlspecialchars()» используются для кодирования HTML-сущностей, но они имеют разные цели:

«htmlspecialchars()»: Эта функция в основном используется для экранирования символов HTML, которые имеют специальное значение в HTML, таких как <, >, &, и «. Она преобразует эти символы в соответствующие HTML-сущности (<, >, &, «). Это часто используется для предотвращения атак XSS (межсайтового скриптинга), гарантируя, что пользовательский ввод отображается «как есть», без интерпретации как HTML.

«htmlentities()»: Эта функция преобразует все применимые символы в соответствующие HTML-сущности. В дополнение к символам, экранируемым «htmlspecialchars()», она также преобразует символы, такие как не-ASCII символы и различные символы. Эта функция часто используется, когда необходимо гарантировать безопасное кодирование всех символов для вывода HTML, особенно при работе с многоязычным контентом.

#вопросы_с_собеседований
9😁2
Освоение маршрутов Laravel: комплексное руководство для всех уровней

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

Далее представляются более продвинутые техники, такие как привязка модели к маршруту, контроллеры ресурсов и API-маршруты.

В целом, автор подчеркивает важность понимания маршрутизации в Laravel для создания эффективных и динамичных веб-приложений, а также призывает читателей экспериментировать с изученными концепциями для улучшения навыков в разработке на Laravel.
😁7
Laravel 11. Что нового?

Команда Тейлора скоро выпустит новую мажорную версию фреймворка. Laravel 11 продолжает улучшения, начатые в Laravel 10.x, представляя упрощенную структуру приложения, ограничение скорости в секунду, маршруты проверки состояния приложения, элегантную ротацию ключа шифрования, улучшения в тестировании очередей, транспорт отправки почты, интеграцию с Prompt валидатором, новые команды Artisan и другие нововведения. Кроме того, был представлен Laravel Reverb — масштабируемый сервер WebSocket, обеспечивающий надежную работу в реальном времени.

Основные изменения в Laravel 11:

🔴Требуется PHP 8.2.

🟠Упрощенная структура приложения с новым файлом bootstrap/app.php для настройки маршрутизации, промежуточного ПО, обработки исключений и т.д.

🟡Вместо пяти сервис-провайдеров в Laravel 11 по умолчанию только один — AppServiceProvider, объединяющий функционал предыдущих.

🟢Расширены возможности использования переменных окружения для конфигурации фреймворка.

Удалены файлы маршрутов api.php и channels.php, но их можно создать при необходимости.

🟣Мидлвары теперь настраиваются в bootstrap/app.php, что уменьшает объем приложения.

🔵Планировщик задач теперь настраивается непосредственно в файле routes/console.php.

🔴Обработка исключений также настраивается в bootstrap/app.php.

🟠По умолчанию новые приложения Laravel используют SQLite для хранения данных, что упрощает начало работы.

🟡Laravel Reverb предоставляет быструю и масштабируемую работу с WebSocket, а также поддерживает горизонтальное масштабирование с использованием Redis.

🟢Добавлена поддержка ограничения скорости в секунду.

Введены маршруты проверки состояния приложения.

🟣Добавлена элегантная ротация ключей шифрования.

🔵Добавлены новые команды Artisan для быстрого создания классов, интерфейсов и трейтов.
👍20🔥10😁5🥱42
💬 Как вы относитесь к парному программированию? Это то самое, при котором два разраба работают вместе над одной задачей, сидя за одним рабочим местом.
👍18🥱7🌚5😁1
Еще один #дайджест новостей по PHP за неделю:

🔎Выпущена версия cakephp phpstan 3.1.0! — много изменений в работе с таблицами и многое другое!

🔎Выпущена Symfony 7.0.4 — Вот список наиболее важных изменений с версии 7.0.3.

🔎Неделя Symfony № 895 (19–25 февраля 2024 г.)
👍5
Мечты о строго и статически типизированном PHP

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

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

Кроме того, обсуждается вопрос о том, каким образом внедрить эти функции, предлагаются различные варианты синтаксиса для реализации типизации переменных и массивов, а также предлагается использование псевдонимов типов для упрощения работы с повторяющимися типами данных в коде.
👍5
🧿 Знания — сила! Что должен изучить каждый программист?

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

‼️ Мы проведем анализ ответов и составим ТОП-лист навыков, которые не помешают освоить каждому программисту и разработчику для успешного карьерного роста!

👉 Опросик
😁7🤔1
Практический пример декомпозиции монолитного PHP приложения

Декомпозиция монолита — не редкая проблема. Это связано с тем, что на ранних стадиях развития любого стартапа накапливается так называемый decision debt — выбранная архитектура является оптимальной для быстрой разработки и экспериментирования, но не для зрелого продукта.

«Decision debt» относится к ситуации, когда команда разработчиков откладывает принятие решения по определенным важным аспектам проекта или архитектурным решениям. Этот долг накапливается, когда разработчики временно откладывают принятие решения, чтобы сосредоточиться на разработке продукта в срок или избежать затрат времени на принятие сложных решений.

Учитывая популярность проблемы, существует множество книг и статей о подходах к её решению, но автор считает, что есть недостаток практических примеров. Поэтому, в этой статье он решил сосредоточиться на технических деталях, используя в качестве примера приложение, написанное на PHP и фреймворке Symfony.
👍71
ИИ для PHP: как настроить подсказки ИИ для улучшения тестов

В нашем прошлом посте мы рассмотрели, как JetBrains AI Assistant может автоматически создавать модульные тесты. Генерируя скучный шаблонный код, мы можем сразу перейти к более интересной части создания тестов.

Здесь рассказывается про то, как можно улучшить ваши промты для написания более надежных тестов
AI Assistant может быть точнее в предсказании желаемого кода и дает пользователю возможность дополнительно специфицировать запросы с помощью кнопки «Specify».

Также здесь подчеркивается, что целью не является генерация идеального кода, а скорее упрощение скучных и рутинных задач, чтобы программисты могли сосредоточиться на более интересных частях разработки.
🥱4👍21
Какие способы оптимизации производительности баз данных знаете?

Существует несколько основных способов оптимизации баз данных:

Индексирование: Убедитесь, что ваша база данных имеет правильные индексы для часто используемых запросов. Индексы позволяют ускорить поиск данных.

Оптимизация запросов: Напишите запросы таким образом, чтобы они были эффективными. Используйте инструкции JOIN, WHERE и GROUP BY там, где это необходимо, чтобы снизить объем возвращаемых данных.

Кэширование: Используйте кэширование результатов запросов там, где это возможно. Например, результаты запросов к базе данных могут быть кэшированы в Redis или Memcached.

Ограничение объема данных: Загружайте только те данные, которые действительно нужны. Используйте LIMIT и OFFSET при запросах, чтобы извлекать только необходимое количество записей.

Оптимизация структуры таблиц: Проведите анализ структуры таблиц и убедитесь, что она оптимально сбалансирована для ваших запросов. Иногда изменение типов данных, уменьшение размера полей или нормализация таблиц может улучшить производительность.

Использование транзакций: Используйте транзакции для группировки нескольких операций в одну единицу работы. Это помогает уменьшить накладные расходы на управление транзакциями и обеспечить целостность данных.

Масштабирование базы данных: При необходимости масштабируйте базу данных горизонтально или вертикально. Горизонтальное масштабирование (шардинг) позволяет распределить данные по нескольким серверам, а вертикальное масштабирование (разделение на таблицы) позволяет распределить данные по разным таблицам или базам данных.

Мониторинг и профилирование: Регулярно отслеживайте производительность запросов и операций базы данных с помощью инструментов мониторинга и профилирования. Это позволяет идентифицировать узкие места и проводить дальнейшую оптимизацию.

#вопросы_с_собеседований
👍14🌚51