В PHP 8.4 появится новая оптимизация компилятора, разработанная совместно с Tideways. Эта оптимизация касается функции sprintf(), которая теперь обрабатывается более эффективно, когда форматная строка содержит только плейсхолдеры %s.
Если форматная строка содержит только плейсхолдеры %s, вызов sprintf() преобразуется в эквивалентную строковую интерполяцию. Это позволяет избежать накладных расходов на вызов функции и парсинг строки формата. Например, код:
преобразуется в:
Поддержка плейсхолдера %d: Вскоре после первой оптимизации была добавлена поддержка плейсхолдера %d. Эти два плейсхолдера ( %s и %d) охватывают более 90% форматных строк, используемых в тестах Symfony Benchmark.
Влияние на производительность: Поскольку функция sprintf() широко используется в PHP коде (например, в кодовой базе Tideways она используется 616 раз), эта оптимизация улучшит общую производительность PHP.
Легкость использования: Оптимизация происходит автоматически во время компиляции скрипта PHP и не требует дополнительных действий со стороны разработчиков. Это также позволяет использовать sprintf() для более читаемого кода без ущерба для производительности.
Если форматная строка содержит только плейсхолдеры %s, вызов sprintf() преобразуется в эквивалентную строковую интерполяцию. Это позволяет избежать накладных расходов на вызов функции и парсинг строки формата. Например, код:
private
function
key
(
string
$type
,
int
$identifier
):
string
{
return
sprintf
(
'last_ts_%s_%s'
,
$type
,
$identifier
);
}
преобразуется в:
private
function
key
(
string
$type
,
int
$identifier
):
string
{
return
«last_ts_
{
$type
}
_
{
$identifier
}
»
;
}
Поддержка плейсхолдера %d: Вскоре после первой оптимизации была добавлена поддержка плейсхолдера %d. Эти два плейсхолдера ( %s и %d) охватывают более 90% форматных строк, используемых в тестах Symfony Benchmark.
Влияние на производительность: Поскольку функция sprintf() широко используется в PHP коде (например, в кодовой базе Tideways она используется 616 раз), эта оптимизация улучшит общую производительность PHP.
Легкость использования: Оптимизация происходит автоматически во время компиляции скрипта PHP и не требует дополнительных действий со стороны разработчиков. Это также позволяет использовать sprintf() для более читаемого кода без ущерба для производительности.
👍6❤4🔥2
Что такое «PHP Extension Community Library» (PECL), и как её использовать для расширения функциональности PHP?
Библиотека сообщества расширений PHP (PECL) служит репозиторием для PHP-расширений. PHP-расширения представляют собой модули, написанные на C, которые могут быть динамически загружены в PHP для предоставления дополнительной функциональности. Эти расширения могут взаимодействовать с PHP на более низком уровне, чем обычные скрипты PHP, позволяя разработчикам использовать системные ресурсы, взаимодействовать с базами данных и выполнять другие задачи, которые могут быть более эффективно реализованы на языке более низкого уровня.
Цель PECL заключается в предоставлении централизованного места для разработчиков, где они могут делиться и распространять PHP-расширения. Это гарантирует, что разработчики PHP могут легко находить, устанавливать и использовать расширения для расширения возможностей PHP.
Чтобы использовать PECL для расширения функциональности PHP, обычно следуют следующим шагам:
Установка PECL: Убедитесь, что PECL установлен на вашей системе. Обычно он поставляется вместе с установками PHP, но в зависимости от вашей конфигурации может потребоваться установить его отдельно.
Поиск расширений: Просмотрите веб-сайт PECL или используйте команду pecl search, чтобы найти расширения, предоставляющие необходимую функциональность.
Установка расширений: После того как вы нашли нужное расширение, вы можете установить его с помощью команды pecl install, за которой следует имя расширения.
Включение расширения: После установки расширения вам нужно включить его в файле конфигурации PHP (php.ini). Вы можете сделать это вручную, добавив строку вроде extension=имя_расширения.so в файл php.ini, или с помощью команды phpenmod, если вы используете систему с хранилищем расширений и приложений PHP (PEAR)
Перезапуск веб-сервера: После включения расширения необходимо перезапустить веб-сервер (например, Apache или Nginx), чтобы изменения вступили в силу.
Тестирование расширения: Наконец, вы можете протестировать функциональность, предоставляемую расширением, в ваших PHP-скриптах. Вы можете использовать функции или классы расширения, как это указано в его документации.
#вопросы_с_собеседований
Библиотека сообщества расширений PHP (PECL) служит репозиторием для PHP-расширений. PHP-расширения представляют собой модули, написанные на C, которые могут быть динамически загружены в PHP для предоставления дополнительной функциональности. Эти расширения могут взаимодействовать с PHP на более низком уровне, чем обычные скрипты PHP, позволяя разработчикам использовать системные ресурсы, взаимодействовать с базами данных и выполнять другие задачи, которые могут быть более эффективно реализованы на языке более низкого уровня.
Цель PECL заключается в предоставлении централизованного места для разработчиков, где они могут делиться и распространять PHP-расширения. Это гарантирует, что разработчики PHP могут легко находить, устанавливать и использовать расширения для расширения возможностей PHP.
Чтобы использовать PECL для расширения функциональности PHP, обычно следуют следующим шагам:
Установка PECL: Убедитесь, что PECL установлен на вашей системе. Обычно он поставляется вместе с установками PHP, но в зависимости от вашей конфигурации может потребоваться установить его отдельно.
Поиск расширений: Просмотрите веб-сайт PECL или используйте команду pecl search, чтобы найти расширения, предоставляющие необходимую функциональность.
Установка расширений: После того как вы нашли нужное расширение, вы можете установить его с помощью команды pecl install, за которой следует имя расширения.
Включение расширения: После установки расширения вам нужно включить его в файле конфигурации PHP (php.ini). Вы можете сделать это вручную, добавив строку вроде extension=имя_расширения.so в файл php.ini, или с помощью команды phpenmod, если вы используете систему с хранилищем расширений и приложений PHP (PEAR)
Перезапуск веб-сервера: После включения расширения необходимо перезапустить веб-сервер (например, Apache или Nginx), чтобы изменения вступили в силу.
Тестирование расширения: Наконец, вы можете протестировать функциональность, предоставляемую расширением, в ваших PHP-скриптах. Вы можете использовать функции или классы расширения, как это указано в его документации.
#вопросы_с_собеседований
👍12❤3👎1🥰1
Если вы хотите показать «1 comment», но «2 commentS» с формой множественного числа в зависимости от количества, используйте `
str()->plural()
`.Вы также можете использовать его с помощником `
str()
` или с классом `Str::
`.На ваше усмотрение.
https://laravel.com/docs/11.x/strings#method-str-plural
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤5🔥3
Как использовать Eager loading в Laravel?
Eager loading в Laravel — это способ предварительной загрузки связанных моделей, чтобы уменьшить количество запросов к базе данных и повысить производительность приложения. При использовании ленивой загрузки (lazy loading) связанные данные загружаются только тогда, когда к ним обращаются, что может привести к множественным запросам к базе данных (проблема N+1 запросов). В то время как eager loading загружает все необходимые данные заранее, используя объединение (join) или отдельные запросы с использованием ключевого слова with.
Eager loading помогает значительно снизить нагрузку на базу данных и ускорить работу приложения за счет уменьшения количества выполняемых запросов.
#вопросы_с_собеседований
Eager loading в Laravel — это способ предварительной загрузки связанных моделей, чтобы уменьшить количество запросов к базе данных и повысить производительность приложения. При использовании ленивой загрузки (lazy loading) связанные данные загружаются только тогда, когда к ним обращаются, что может привести к множественным запросам к базе данных (проблема N+1 запросов). В то время как eager loading загружает все необходимые данные заранее, используя объединение (join) или отдельные запросы с использованием ключевого слова with.
Eager loading помогает значительно снизить нагрузку на базу данных и ускорить работу приложения за счет уменьшения количества выполняемых запросов.
#вопросы_с_собеседований
👍8❤2
Цикл «
forelse
» в Blade.@phpshka
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11❤4👎1🤡1
Контроль времени обработки кода в PHP с помощью Time Warden
Time Warden — это легкая PHP-библиотека, позволяющая отслеживать время обработки задач и предпринимать действия при превышении заданных порогов времени выполнения.
Эта библиотека имеет отличную документацию в readme проекта, которая вкратце предлагает следующие возможности:
🔸Мониторинг времени обработки критических задач при разработке и отладке
🔸Реактивные действия при превышении времени (миллисекунды, секунды, минуты и часы)
🔸Отладочный вывод времени выполнения
🔸Измерение времени выполнения отдельной задачи и групп задач
🔸Библиотека, не зависящая от фреймворка, которую можно использовать с Laravel, Symfony, автономно и т.д.
🔸PHP 8.2+
Time Warden — это легкая PHP-библиотека, позволяющая отслеживать время обработки задач и предпринимать действия при превышении заданных порогов времени выполнения.
Эта библиотека имеет отличную документацию в readme проекта, которая вкратце предлагает следующие возможности:
🔸Мониторинг времени обработки критических задач при разработке и отладке
🔸Реактивные действия при превышении времени (миллисекунды, секунды, минуты и часы)
🔸Отладочный вывод времени выполнения
🔸Измерение времени выполнения отдельной задачи и групп задач
🔸Библиотека, не зависящая от фреймворка, которую можно использовать с Laravel, Symfony, автономно и т.д.
🔸PHP 8.2+
❤5👍2🔥2
Краткая база для всех, кто работает с Linux.
В этом видео мы разыгрываем 3 крутые книги по Linux:
- Внутреннее устройство Linux. 3-е изд. | Кетов Дмитрий
- Unix и Linux: руководство системного администратора | Хейн Трент Р., Макин Дэн
- Командная строка Linux. Полное руководство. 2-е межд. изд. | Шоттс Уильям
Подписывайтесь на канал, оставляйте осмысленный комментарий под видео и выигрывайте эти крутые книги!
https://www.youtube.com/watch?v=FP8UwvEe3Cs
@phpshka
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2🔥2
https://uproger.com/luchshie-vvodnye-kursy-i-knigi-po-php-dlya-izucheniya-yazyka-s-nulya-v-2024-godu/
@phpshka
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤5🔥4
💡 Совет по Laravel
Знаете ли вы, что метод
Знаете ли вы, что метод
whereAny(),
может осуществлять поиск по нескольким столбцам, используя логику OR.
@phpshka👍17🔥4❤3👎1
💡 Совет по Laravel
Создайте свой собственный метод
@phpshka
Создайте свой собственный метод
Blade Directive
! Это очень просто - просто добавьте свой собственный метод в app/Providers/AppServiceProvider.php.@phpshka
👍8❤2🔥1
🎓 Архив открытых курсов прямо в телеграм!
Вот огромная база материалов, которая пополлняется каждый день!
>Python (96гб видео)
>PHP (196гб видео)
>C# (45гб курсов)
>Английский (101гб курсов)
>Java (23гб видео)
>PHP (43гб видео)
>Мобильная разработка (22гб курсов)
>Go ( 132гб видео)
>Rust (35 гб видео)
>SQL (43гб видео)
>MySQL (31гб видео)
>Другое (234гб видео)
⛓ Крутейший Архив на 20241Гб: Курсов, книг, шпаргалок, стаетй, лекция ресурсы — всё собрано в одном месте: @datacours
Вот огромная база материалов, которая пополлняется каждый день!
>Python (96гб видео)
>PHP (196гб видео)
>C# (45гб курсов)
>Английский (101гб курсов)
>Java (23гб видео)
>PHP (43гб видео)
>Мобильная разработка (22гб курсов)
>Go ( 132гб видео)
>Rust (35 гб видео)
>SQL (43гб видео)
>MySQL (31гб видео)
>Другое (234гб видео)
⛓ Крутейший Архив на 20241Гб: Курсов, книг, шпаргалок, стаетй, лекция ресурсы — всё собрано в одном месте: @datacours
🔥5👎3❤1
Что такое простая фабрика?
Простая фабрика (Simple Factory) — это порождающий шаблон проектирования, который предоставляет интерфейс для создания объектов в зависимости от переданного типа или параметра. В контексте PHP, простая фабрика может быть использована для создания экземпляров классов без явного указания конкретного класса в коде.
Простая фабрика обычно содержит метод, который принимает параметр (например, строку или число), определяющий тип создаваемого объекта, и затем возвращает экземпляр соответствующего класса. Это упрощает процесс создания объектов и позволяет легко изменять создаваемый тип объекта без изменения кода, где объект используется.
#вопросы_с_собеседований
Простая фабрика (Simple Factory) — это порождающий шаблон проектирования, который предоставляет интерфейс для создания объектов в зависимости от переданного типа или параметра. В контексте PHP, простая фабрика может быть использована для создания экземпляров классов без явного указания конкретного класса в коде.
Простая фабрика обычно содержит метод, который принимает параметр (например, строку или число), определяющий тип создаваемого объекта, и затем возвращает экземпляр соответствующего класса. Это упрощает процесс создания объектов и позволяет легко изменять создаваемый тип объекта без изменения кода, где объект используется.
#вопросы_с_собеседований
👍12❤2🥱1
Ошибка Go-новичка: использовать Redis не на всю катушку
А чтобы уметь на всю — приходите на бесплатный вебинар «Gони, Redis, Gони!» от Слёрма.
31 июля встречаемся с Виталием Лихачёвым, Ex-Avito Senior Software Engineer и SRE в booking.сom, чтобы поговорить про все варианты эксплуатации Redis, которые давно вышли за пределы key-value storage.
Обсудим:
▶ Вторичные индексы, распределенные блокировки, полнотекстовый поиск
▶ Паттерны использования Redis с примерами на Golang
▶ Работу Redis со стороны эксплуатации
Также в программе — ответы на ваши вопросы и подарки самым активным слушателям 🎁
🗓 31 июля в 19:00 по Москве
➡️ Регистрация на вебинар — с помощью бота
А чтобы уметь на всю — приходите на бесплатный вебинар «Gони, Redis, Gони!» от Слёрма.
31 июля встречаемся с Виталием Лихачёвым, Ex-Avito Senior Software Engineer и SRE в booking.сom, чтобы поговорить про все варианты эксплуатации Redis, которые давно вышли за пределы key-value storage.
Обсудим:
Также в программе — ответы на ваши вопросы и подарки самым активным слушателям 🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Redis намного лучше справляется с этой задачей.
Вы можете использовать Redis и команду планирования для поддержки синхронизации с MySQL на фиксированный интервал времени.
@phpshka
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3❤🔥2
Алгоритмы в PHP: Deque (и круговые буферы + связанные списки)
PHP массивы хорошо подходят для многих задач, но операции добавления элементов в начало массива (array_unshift) являются медленными, поскольку требуют сдвига всего массива. Решение для этого проблемы — использование deque (двусторонней очереди).
Очереди и стеки
В программировании, очереди и стеки играют важную роль:
Очередь (FIFO): первый пришел — первый ушел. Работает как очередь в магазине.
Стек (LIFO): последний пришел — первый ушел. Работает как стопка тарелок.
Двусторонняя очередь (Deque)
Deque позволяет добавлять и удалять элементы с обоих концов с эффективностью O(1). Обычно реализуется на основе связанных списков или кольцевого буфера и идеально подходит для реализации функций отмены (undo).
Реализация кольцевого буфера
Для улучшения производительности можно использовать кольцевой буфер, что минимизирует затраты на операции добавления и удаления элементов. Кольцевой буфер использует два курсора (head и tail), что позволяет добавлять и удалять элементы с обоих концов массива.
Добавление элемента в начало буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в начальной позиции, переместить его в конец массива.
🔸Иначе, декрементировать курсор.
🔸Добавить элемент в массив.
Добавление элемента в конец буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в конце массива, переместить его в начало.
🔸Иначе, инкрементировать курсор.
🔸Добавить элемент в массив.
PHP массивы хорошо подходят для многих задач, но операции добавления элементов в начало массива (array_unshift) являются медленными, поскольку требуют сдвига всего массива. Решение для этого проблемы — использование deque (двусторонней очереди).
Очереди и стеки
В программировании, очереди и стеки играют важную роль:
Очередь (FIFO): первый пришел — первый ушел. Работает как очередь в магазине.
Стек (LIFO): последний пришел — первый ушел. Работает как стопка тарелок.
Двусторонняя очередь (Deque)
Deque позволяет добавлять и удалять элементы с обоих концов с эффективностью O(1). Обычно реализуется на основе связанных списков или кольцевого буфера и идеально подходит для реализации функций отмены (undo).
Реализация кольцевого буфера
Для улучшения производительности можно использовать кольцевой буфер, что минимизирует затраты на операции добавления и удаления элементов. Кольцевой буфер использует два курсора (head и tail), что позволяет добавлять и удалять элементы с обоих концов массива.
Добавление элемента в начало буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в начальной позиции, переместить его в конец массива.
🔸Иначе, декрементировать курсор.
🔸Добавить элемент в массив.
Добавление элемента в конец буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в конце массива, переместить его в начало.
🔸Иначе, инкрементировать курсор.
🔸Добавить элемент в массив.
👍14❤3😱1
⚡️Лучший способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:
Машинное обучение: www.tg-me.com/ai_machinelearning_big_data
C++ www.tg-me.com/cpluspluc
Devops: www.tg-me.com/devOPSitsec
АНАЛИЗ Данных: www.tg-me.com/data_analysis_ml
Хакинг: www.tg-me.com/linuxkalii
Linux: www.tg-me.com/linuxacademiya
Базы данных: www.tg-me.com/sqlhub
C#: www.tg-me.com/csharp_ci
Golang: www.tg-me.com/Golang_google
Java: www.tg-me.com/javatg
React: www.tg-me.com/react_tg
Javascript: www.tg-me.com/javascriptv
Мобильная разработка: www.tg-me.com/mobdevelop
Docker: www.tg-me.com/+0WdB4uvOwCY0Mjdi
Python: www.tg-me.com/pythonl
Rust: www.tg-me.com/rust_code
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Big Data: www.tg-me.com/bigdatai
Собеседования МЛ: www.tg-me.com/machinelearning_interview
Python подготовка с собесу: www.tg-me.com/python_job_interview
МАТЕМАТИКА: www.tg-me.com/data_math
💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
C++ папка: https://www.tg-me.com/addlist/CdBs5DLepLJmZjY6
C# папка: https://www.tg-me.com/addlist/u15AMycxRMowZmRi
Java папка: https://www.tg-me.com/addlist/ZM3J6oFNAnRlNWU6
FRONTEND папка: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy
Linux папка: https://www.tg-me.com/addlist/w4Doot-XBG4xNzYy
😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno
📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
Арихив бесплатных ит-курсов: https://www.tg-me.com/+-YDHdeS5EEs3MDNi
Машинное обучение: www.tg-me.com/ai_machinelearning_big_data
C++ www.tg-me.com/cpluspluc
Devops: www.tg-me.com/devOPSitsec
АНАЛИЗ Данных: www.tg-me.com/data_analysis_ml
Хакинг: www.tg-me.com/linuxkalii
Linux: www.tg-me.com/linuxacademiya
Базы данных: www.tg-me.com/sqlhub
C#: www.tg-me.com/csharp_ci
Golang: www.tg-me.com/Golang_google
Java: www.tg-me.com/javatg
React: www.tg-me.com/react_tg
Javascript: www.tg-me.com/javascriptv
Мобильная разработка: www.tg-me.com/mobdevelop
Docker: www.tg-me.com/+0WdB4uvOwCY0Mjdi
Python: www.tg-me.com/pythonl
Rust: www.tg-me.com/rust_code
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Big Data: www.tg-me.com/bigdatai
Собеседования МЛ: www.tg-me.com/machinelearning_interview
Python подготовка с собесу: www.tg-me.com/python_job_interview
МАТЕМАТИКА: www.tg-me.com/data_math
💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
C++ папка: https://www.tg-me.com/addlist/CdBs5DLepLJmZjY6
C# папка: https://www.tg-me.com/addlist/u15AMycxRMowZmRi
Java папка: https://www.tg-me.com/addlist/ZM3J6oFNAnRlNWU6
FRONTEND папка: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy
Linux папка: https://www.tg-me.com/addlist/w4Doot-XBG4xNzYy
😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno
📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
Арихив бесплатных ит-курсов: https://www.tg-me.com/+-YDHdeS5EEs3MDNi
👍3❤2🔥1