Библиотека пхпшника | 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
Читаемые end-to-end тесты для PHPStan с помощью bashunit

Статья описывает опыт использования end-to-end тестов в проекте PHPStan, который разрабатывается на языке PHP и предназначен для статического анализа кода. Основной акцент делается на том, как эти тесты реализованы с помощью bash-скриптов и GitHub Actions, а также на преимуществах такого подхода.
👍2
📣 Использование двух помощников в Laravel принесет удивительные результаты...

В этом случае сервис будет вызван и попытается снова. Если он все еще не удастся сработать, об этом будет сообщено, но запрос не упадет.
🥱10🔥3🎉2
PHP 8.4: Новые функции поиска в массиве. Пишем с нуля

В PHP 8.4 планируется добавить новые функции массива: array_find, array_find_key, array_any и array_all, которые являются вспомогательными функциями для общих шаблонов проверки массива на наличие элементов, соответствующих определенному условию.

В настоящее время существует несколько функций, обрабатывающих массивы с использованием обратного вызова. Однако по-прежнему отсутствуют функции для поиска отдельного элемента, соответствующего условию, и тесно связанные функции проверки наличия элементов, соответствующих условию. Реализовать эти функции в среде пользователей относительно просто, но они часто требуются, что приводит к тому, что колесо изобретается снова и снова. Кроме того, функции такого типа реализованы и в других языках программирования, таких как Rust, JavaScript или C++.

Поэтому есть причина включить эти функции в стандартную комплектацию следующей версии PHP. Кроме того, реализация этих функций очень похожа на array_filter и относительно проста в реализации, поэтому затраты на обслуживание должны быть низкими.
👍17🥰6🔥3
Практическое логирование для PHP-приложений с помощью OpenTelemetry

Это самый полный гайд по логированию в PHP с использованием OpenTelemetry
👍4
#хочу_спросить

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

Этот пакет позволяет использовать атрибуты вместо аннотаций PHPDoc для статического анализа с помощью PHPStan.
👍61
Что означает сложность алгоритма?

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

Существуют два основных типа сложности алгоритма: временная сложность и пространственная сложность.

Временная сложность алгоритма оценивает время, необходимое для его выполнения, в зависимости от размера входных данных. Обычно время выполнения алгоритма измеряется в тактах процессора или в секундах. Примеры временной сложности включают константную сложность O(1) (выполнение за постоянное время), линейную сложность O(n) (выполнение занимает время, пропорциональное размеру входных данных) и квадратичную сложность O(n^2) (выполнение занимает время, пропорциональное квадрату размера входных данных).

Пространственная сложность алгоритма оценивает объем памяти, необходимый для его выполнения, в зависимости от размера входных данных. Обычно пространственная сложность измеряется в байтах. Примеры пространственной сложности включают константную сложность O(1) (не зависит от размера входных данных), линейную сложность O(n) (потребляет память, пропорционально размеру входных данных) и квадратичную сложность O(n^2) (потребляет память, пропорционально квадрату размера входных данных).

#вопросы_с_собеседований
👏3😢1
WeakMaps — скрытая жемчужина в PHP

Компания работает над новой функцией для Flare и столкнулась с задачей оптимизации хранения элементов в массиве. Ранее элементы просто добавлялись в массив, и при превышении лимита удалялся самый старый элемент.

Сложность возросла, когда потребовалось создать структуру узлов (Node), где каждый узел может содержать дочерние узлы и элементы. Для нахождения нужного узла использовался MagicNodeFinder, но при удалении элементов возникли проблемы: не было способа точно определить, в каком узле находится элемент, что приводило к неэффективному обходу дерева.

Решение пришло с использованием WeakMap, нового в PHP 8.0. WeakMap позволяет хранить объекты без увеличения их ссылочного счетчика, поэтому при удалении объекта из памяти, он автоматически удаляется и из WeakMap. Это позволило легко управлять элементами в узлах без необходимости обхода дерева при удалении.

Использование WeakMap улучшило производительность и упростило код. Теперь, когда элемент удаляется из массива, он автоматически удаляется и из WeakMap узла.
👍3🔥21💯1
Анонимные и стрелочные функции: как использовать их вместо create_function в PHP 8

В статье рассказано, как команда проводила рефакторинг кода при переходе с PHP 7.4 на PHP 8 и на что заменили одну из самых популярных функций — create_function.
🌚9🥱5👍4😁2
Сколько раз в неделю вы ездите в офис? Вы бы хотели перейти на удалёнку?
#интерактив
Использование Temporal для эффективного управления жизненным циклом документов

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

Проблема

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

Решение

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

Шаги реализации:

📋 Предпосылки: Определите основные классы для событий и очередей событий.

🛠️ Создание базового рабочего процесса: Создайте Workflow с методами для сигналов и запуска.

📤 Отправка событий в Workflow: Реализуйте метод для отправки событий в Workflow.

⏱️ Введение таймеров: Добавьте таймеры для более эффективного управления поведением пользователей.

🔄 Продолжение как новый: Реализуйте механизм перезапуска Workflow при достижении лимита истории.

🚀 Продвинутые таймеры и дедупликация: Реализуйте RollingTimer и дедупликацию в очереди для более эффективного управления событиями.
👍3🔥1
💵⚡️ДАРИМ 40 000₽ ЗА ВИДЕО

Конкурс года в «Библиотеке программиста»: смонтируйте короткий вертикальный ролик формата Shorts/Reels* на тему программирования и разработки — лучший автор получит 40 тысяч рублей 🤑

Подробные условия:
➡️смонтируйте короткий смешной вертикальный ролик (можно и нужно использовать мемы)
➡️отправьте нам в бота @ProglibContest_bot
➡️лучшие ролики (по мнению редакции) мы будем выкладывать в канал и в наш инстаграм*
➡️тот, чей ролик соберет больше всего просмотров в инстаграм*, получит приз — 40 тысяч рублей

Какие ролики мы не принимаем:
😟не вашего авторства (проверим!)
😟длинные, невертикальные, несмешные

Таймлайн:
2 августа — заканчиваем принимать видео
⬇️
3 августа — начинаем загружать лучшие видео в инстаграм
⬇️
9 августа — подводим итоги

*Организация Meta признана экстремистской в РФ
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4👍1🔥1🎉1
🆕 JavaScript эволюционирует: новые методы и функции для эффективной разработки

Нововведения нацелены на повышение читаемости и эффективности кода. Рассмотрим, как Object.groupBy, регулярные выражения с V-флагом, Promise.withResolvers и методы мутации массивов решают актуальные задачи программирования.

🔗 Читать статью
🔗 Зеркало
🥱2
#дайджест новостей по PHP за неделю:

🔎Версионирование API в Laravel 11 — С выходом Laravel 11 скелет приложения был урезан, чтобы удалить лишние файлы, которые не нужны в каждом проекте. Частью этого изменения стало удаление из исходного кода приложения всех поставщиков услуг, кроме AppServiceProvider.

🔎Built with LaravelBuiltWithLaravel.com — список компаний и организаций, использующих Laravel в мире, не связанном с Laravel.

🔎PHP 8.4.0 Alpha 2 доступен для тестирования — Команда PHP рада объявить о выходе второго тестового релиза PHP 8.4.0, Alpha 2. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.

🔎Неделя Symfony #916 (15-21 июля 2024 года) — На этой неделе активность разработчиков была медленнее, чем обычно, и была сосредоточена на исправлениях и доработках во всех поддерживаемых ветках.
3👍1
Алгоритмы в PHP: Deque (и круговые буферы + связанные списки)

PHP массивы хорошо подходят для многих задач, но операции добавления элементов в начало массива (array_unshift) являются медленными, поскольку требуют сдвига всего массива. Решение для этого проблемы — использование deque (двусторонней очереди).

Очереди и стеки

В программировании, очереди и стеки играют важную роль:

Очередь (FIFO): первый пришел — первый ушел. Работает как очередь в магазине.
Стек (LIFO): последний пришел — первый ушел. Работает как стопка тарелок.

Двусторонняя очередь (Deque)

Deque позволяет добавлять и удалять элементы с обоих концов с эффективностью O(1). Обычно реализуется на основе связанных списков или кольцевого буфера и идеально подходит для реализации функций отмены (undo).

Реализация кольцевого буфера

Для улучшения производительности можно использовать кольцевой буфер, что минимизирует затраты на операции добавления и удаления элементов. Кольцевой буфер использует два курсора (head и tail), что позволяет добавлять и удалять элементы с обоих концов массива.

Добавление элемента в начало буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в начальной позиции, переместить его в конец массива.
🔸Иначе, декрементировать курсор.
🔸Добавить элемент в массив.

Добавление элемента в конец буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в конце массива, переместить его в начало.
🔸Иначе, инкрементировать курсор.
🔸Добавить элемент в массив.
👍51🔥1🥰1👏1
✍️ «Библиотека программиста» находится в поиске автора на написание книжных рецензий

Кто нужен?
● Энтузиасты (джуны и выше), которые которые разбираются в IT
● Любители книг, которые хотели бы получать деньги за чтение и написание рецензий
● Работаем с самозанятыми (компенсируем налог), ИП

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

✉️ Станьте частью нашей команды — присылайте резюме и примеры работ [email protected]
👍2
За и против: становиться ли айтишником в 2024 году

В 2024 году IT-специалисты остаются на пике популярности. Но стоит ли вам становиться одним из них? Рассмотрим основные аргументы, чтобы понять, стоит ли вам становиться IT-специалистом в нашей статье.👇

🔗 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1
Golang убивает PHP

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

В связи с этим планируется публикация ряда статей, которые будут посвящены особенностям разработки, проблемам, которые необходимо учитывать, а также ролям участников разработки, таким как DevOps-инженеры.
🥱32👍6😁3🔥2👾1
Гайд по Query Scopes в Laravel

В Laravel имеются локальные и глобальные запросные области (query scopes), которые позволяют определять ограничения в запросах Eloquent, делая их повторно используемыми и более читаемыми.

Локальные области запросов необходимо применять вручную, а глобальные области запросов автоматически применяются ко всем запросам модели.
4👍1