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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Не забудьте оставить комментарий с вашими мыслями об ИИ в программировании! Какие преимущества и недостатки вы видите? Какие инструменты рекомендуете попробовать коллегам? 🤔💬
👍1
Что такое план выполнения запроса и как его узнать?

План выполнения запроса (Query Execution Plan) — это детальный анализ того, как база данных будет выполнять запрос, включая порядок обработки данных, используемые индексы, методы соединения и другие оптимизации запроса. Понимание плана выполнения запроса может помочь оптимизировать производительность запросов, выявляя возможные проблемы и улучшая структуру запроса или индексы.

В разных системах управления базами данных (СУБД) есть различные способы получения плана выполнения запроса. Ниже приведены общие методы для некоторых из них:

MySQL / MariaDB:
Используйте ключевое слово EXPLAIN перед запросом SQL.

PostgreSQL:
Используйте ключевое слово EXPLAIN перед запросом SQL.
Для более подробного анализа используйте ключевое слово EXPLAIN ANALYZE.

SQL Server:
Используйте ключевое слово EXPLAIN перед запросом SQL.
Для более подробного анализа используйте команду SET SHOWPLAN_TEXT ON;, а затем выполните запрос.

SQLite:
Используйте ключевое слово EXPLAIN QUERY PLAN перед запросом SQL.

Oracle:
Используйте инструкцию EXPLAIN PLAN FOR.

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

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

Ключевыми принципами модульной архитектуры являются разделение кода на логические блоки и четкое определение зависимостей между ними. Используя модули, разработчики могут работать над разными частями приложения одновременно, что сокращает время разработки. Помимо этого, модульная структура позволяет легче адаптировать приложение к изменениям бизнес-требований или технологическим обновлениям.
🥱5
🔎Пользуетесь ли вы какими-либо иностранными новостными ресурсами по программированию на регулярной основе? Если да, то какими?🔽
🤔4
This media is not supported in your browser
VIEW IN TELEGRAM
🤓 Git Gud — игра для изучения Git

Это игра с командной строкой. В ней уровни разделены от простого к экспертному.

🔗 Ссылка
👍12
⚡️Самые полезные каналы по PHP в одной папке

В ней:
канал для подготовки к собеседованиям
интересные задачи
основной канал (этот)
лучшие вакансии из сферы
и наш чат, в котором можно общаться и задавать вопросы

Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
PHP 8.4 Property Hooks: Можно ли теперь избавиться от геттеров/сеттеров?

В будущей версии PHP 8.4 появится новая функция — «хуки для свойств», позволяющая добавлять логику при обращении к свойствам класса для чтения или записи данных. Это значит, что теперь можно отказаться от использования приватных свойств и публичных методов для их обработки (геттеров и сеттеров).

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

Основные результаты и выводы:

✔️Производительность геттеров и сеттеров: Исследование показало, что вызовы геттеров и сеттеров занимают незначительную часть времени выполнения, даже при работе с большим объемом данных, и практически не влияют на общую производительность приложения.

✔️Сравнение производительности: В тестах с хуками и геттерами/сеттерами разница в скорости оказалась минимальной — около 9%. Это подтверждает, что производительность не должна быть решающим фактором при выборе между хуками и геттерами/сеттерами.

✔️Основные причины использования геттеров/сеттеров: Обычно геттеры и сеттеры применяют не для повышения скорости, а для ограничения доступа к данным и контроля за структурой класса. С хуками такие ограничения также можно реализовать, добавляя нужную логику при доступе к свойству.

✔️Итоги тестирования альфа-версии: Во время ранних тестов PHP 8.4 производительность хуков была ниже, чем у геттеров. Это указывало на необходимость оптимизации, и в итоге в RFC были внесены улучшения, благодаря которым сейчас хуки в PHP 8.4 работают быстрее.
👍13
Стоит ли возвращать null из методов. Если нет, то почему и как писать код в таких случаях?

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

Если метод не может вернуть ожидаемый результат или найти запрошенное значение, то лучше выбросить исключение, чтобы проинформировать о такой ситуации и позволить соответствующей обработке ошибок или выполнению альтернативных действий. Если метод не может найти результат, который можно обозначить специальным значением, можно вернуть значение-заглушку, которое явно указывает на отсутствие результата или ошибку. Это может быть пустой массив, пустой объект, пустая строка или целое число, имеющее конкретное значение, которое в вашем контексте обозначает отсутствие результата.
👍8👾4
Composer: бинарные образы Docker

Разработчик предложил создать новую версию Docker-образов для Composer, содержащую только бинарный файл Composer, что позволяет оптимизировать пространство и ресурсы. Идея была в том, чтобы избежать загрузки полного образа Composer (около 190 МБ), если требуется только сам бинарный файл (около 2,5 МБ). Его Pull Request был принят, и теперь пользователи могут использовать компактные, бинарные образы Composer в своих сборках Docker.

Особенности новой реализации:

Чтобы использовать бинарный образ, необходимо указать composer/composer и добавить суффикс -bin. Также изменено расположение бинарного файла: теперь он находится в корневом каталоге (/composer) вместо стандартного (/usr/bin/composer).

Пример использования:
FROM php:8-alpine
COPY --from=composer/composer:2-bin /composer /usr/bin/composer


Новый подход подходит для создания кастомных образов на базе PHP с Composer, где можно просто скопировать готовый бинарный файл, избегая программной установки.

Важно отметить, что эти образы содержат только бинарный файл Composer и не подходят для выполнения команд, так как в них нет ни PHP-окружения, ни оболочки.

Технические детали реализации:

Автор добавил новые цели сборки в Dockerfile, что позволило создавать как полноценные, так и бинарные образы. Для этого был применен метод многоэтапной сборки, оптимизирующий конечный образ и исключающий временные файлы. Также в GitHub Actions были настроены новые этапы для сборки и тестирования обоих типов образов.
17👍1
🔐 🔑 OAuth 2: как работает современная авторизация

Помнишь кнопку «Войти через Google»? Та самая кнопка, которая избавляет от необходимости запоминать очередной пароль. Сегодня разберем, как работает эта магия изнутри, почему гиганты вроде Spotify и Medium используют такой способ входа, и как внедрить его в свое приложение. Спойлер: это проще, чем кажется, и гораздо безопаснее традиционной формы регистрации.

Читать статью
🤔4🤩3
Fizz-Buzz за 56 символов?

На сайте code-golf.io вы можете посоревноваться в написании самых коротких решений простых задач по программированию. Например, попробуйте написать самый короткий код FizzBuzz на PHP — на данный момент он составляет всего 56 символов!

Задача состоит в следующем:

🔸Напечатайте числа от 1 до 100 включительно, каждое на своей строке.

🔸Если, однако, число кратно трем, то вместо него выведите Fizz, а если число кратно пяти, то выведите Buzz.

🔸Если верно несколько условий, то должны быть выведены все замены, например 15 — FizzBuzz.

Вот пример на 72 символа:

for(;$i++<100;)echo$i%15?($i%3?($i%5?$i:'Buzz'):'Fizz'):'FizzBuzz',"\n»;
4👍2👏1😁1
Новое в Symfony 7.2

🔸Улучшена работа с тайм-аутами в компоненте Messenger для предотвращения повторной обработки сообщений. Это реализовано двумя новыми функциями:

Поддержка keepalive: введен интерфейс KeepaliveReceiverInterface, который позволяет транспортам оповещать о том, что сообщение все еще обрабатывается, избегая его возврата в очередь. Метод keepalive(Envelope $envelope): void отправляет уведомление о том, что сообщение активно, предотвращая тайм-аут на стороне транспорта. Несколько встроенных транспортов уже реализуют этот интерфейс, и поддержка будет расширена в будущих версиях Symfony.

ConsoleAlarmEvent и SIGALRM-сигнал: добавлен метод setAlarmInterval в основной класс приложений Symfony для установки интервала сигнала SIGALRM. Команды messenger:consume и messenger:failed:retry теперь поддерживают опцию --keepalive, которая позволяет периодически вызывать keepalive с помощью SIGALRM сигнала.

🔸Компонент Mime получил два важных нововведения:

Пользовательские MIME-энкодеры: раньше Mime-компонент поддерживал только фиксированные типы энкодеров для элементов TextPart (quoted-printable, base64, 8bit). Теперь разработчики могут создавать и использовать собственные энкодеры для специфических нужд, таких как SOAP-вложения.

Поддержка Unicode в email-адресах: благодаря поддержке стандарта RFC 6531 теперь можно использовать Unicode-символы в email-адресах (в локальной и доменной частях).

🔸Добавлена возможность настраивать индикатор завершения в компоненте Console, что улучшает удобство работы и взаимодействие с разработчиком (DX). Ранее при использовании индикатора прогресса отображался вращающийся текстовый спиннер, который оставался на последнем состоянии при завершении команды, что могло создавать неконсистентное впечатление.

Теперь по умолчанию отображается значок ✔️ как индикатор завершения, обеспечивая единообразное завершение. Также можно задать собственное значение индикатора завершения с помощью опции finishedIndicatorValue.
🔥51
#хочу_спросить

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