Библиотека пхпшника | 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
Куда движется Laravel? Обзор интервью с Taylor Otwell

На канале ThePrimeTime недавно вышло интервью с создателем Laravel Тейлором, и здесь находится обзор этого интервью на русском языке
👍11😢3👾1
Loupe

Полнотекстовая поисковая система с токенизацией, стеммингом, устойчивостью к опечаткам, фильтрами и географической поддержкой, основанная на чистом PHP и SQLite.
👍5🤩5
Какое криптографическое расширение предоставляет возможность генерации и проверки цифровых подписей?

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

#вопросы_с_собеседований
👍7
Как обновить устаревшую функцию PHPUnit withConsecutive()

В PHPUnit 9 метод withConsecutive() был объявлен устаревшим, а в PHPUnit 10 — удалён, что вызвало множество вопросов на форумах и в проектах. Это изменение оказалось неудобным для разработчиков, так как прямой замены для метода не предусмотрено, и обновление зачастую требует много времени. Однако существует способ заменить withConsecutive(), который делает тесты более гибкими и читаемыми.

Метод withConsecutive() использовался для проверки параметров вызова метода в разном порядке. Например, при первом вызове ожидался один набор параметров, при втором — другой. Однако замена его с помощью метода willReturnCallback() позволяет использовать более гибкий подход. В новом коде параметры проверяются в переданном в willReturnCallback() анонимном методе, где также можно отслеживать номер вызова.

Для этого используется объект InvokedCount, который увеличивает значение с каждым вызовом. Мы можем проверять параметры по вызовам, используя метод getInvocationCount() (в PHPUnit 10 переименованный в numberOfInvocations()).

Преимущества перехода на willReturnCallback() включают:

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

Кроме того, с использованием обычного PHP-кода можно легко внедрять в тесты необходимые исключения, возвращаемые значения и прочие проверки. Такой подход делает тесты проще и гибче, а код становится более поддерживаемым.
🎉52👍1
💬Знаете ли вы, что вы можете использовать «scan» в Laravel для разбора строки, введенной в коллекцию, в соответствии с форматом, поддерживаемым встроенной функцией PHP «sscanf»? 🚀
👍7🥱4🔥1👾1
#дайджест #phpdevjob

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

▪️PHP-разработчик
Санкт-Петербург. Неватрип — международный туристический онлайн сервис
Подробнее

▪️PHP разработчик
Удаленка. Андагар — платформа для проведения спортивных соревнований/турниров
Подробнее

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

▪️Программист PHP
Тольятти. Интроверт — интегратор трансформации процессов продаж
Подробнее

▪️PHP-разработчик
Удаленка. Ньюмедиа Лаб — медиа-стартап
Подробнее

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

▪️PHP Developer
Удаленка. РЕДСМС — телекоммуникационная компания
Подробнее

▪️PHP разработчик
Удаленка. ЯКурьер — разработчик WMS-систем
Подробнее

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

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

Это утилита командной строки для проверки дат истечения срока действия доменных имен и сертификатов TLS.
👏1
Какие техники вы используете для оптимизации запросов к базе данных в Laravel?

1. Жадная загрузка (Избегание проблемы N+1)
По умолчанию Laravel использует ленивую загрузку, что может вызвать проблему N+1 запроса. Например, когда выполняется запрос для коллекции записей, а затем для каждой записи делается отдельный запрос к связанным данным. Жадная загрузка помогает избежать этой проблемы, выполняя один запрос для связанных данных.

// Ленивая загрузка (неэффективно)
$posts = Post::all();
foreach ($posts as $post) {
echo $post->user->name;
}

// Жадная загрузка (оптимизировано)
$posts = Post::with('user')->get();
foreach ($posts as $post) {
echo $post->user->name;
}


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

// Извлечение всех столбцов (неэффективно)
$users = User::all();

// Извлечение только необходимых столбцов (оптимизировано)
$users = User::select('id', 'name', 'email')->get();


3. Чанковка запросов

При работе с большими наборами данных загрузка всего набора может перегрузить память. Используйте чанковку для извлечения данных небольшими порциями.
// Извлечение по 100 записей за раз
User::chunk(100, function ($users) {
foreach ($users as $user) {
// Обработка каждого пользователя
}
});


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

// Вместо выполнения нескольких запросов
$users1 = User::where('role_id', 1)->get();
$users2 = User::where('role_id', 2)->get();

// Использование whereIn для одного запроса
$users = User::whereIn('role_id', [1, 2])->get();


6. Индексация столбцов базы данных
Убедитесь, что столбцы, по которым часто выполняются запросы (например, используемые в условиях where), имеют соответствующие индексы в базе данных. Это значительно ускорит выполнение запросов.

Индексы можно создать через миграции Laravel:

Schema::table('users', function (Blueprint $table) {
$table->index('email');
});


7. Избегайте COUNT(*) с Eloquent, если это не нужно
Вместо загрузки всех строк только для их подсчета, используйте функцию count() напрямую.
// Неэффективно: загрузка всех записей для подсчета
$users = User::all()->count();

// Эффективно: использование count напрямую
$userCount = User::count();


8. Кэширование частых запросов

Если одни и те же запросы выполняются часто, рассмотрите возможность кэширования их результатов, чтобы уменьшить нагрузку на базу данных.
// Кэширование результата запроса на 60 минут
$users = Cache::remember('users', 60, function () {
return User::all();
});


9. Использование DB::raw для сложных SQL-запросов
Для сложных запросов или в случаях, когда требуются определенные SQL-оптимизации (например, использование функций или подзапросов), можно использовать
DB::raw.

10. Использование пула подключений к базе данных
Использование пула подключений (connection pooling), где это возможно, позволяет повторно использовать существующие подключения к базе данных вместо открытия новых для каждого запроса. Это может значительно сократить задержки выполнения запросов, хотя это больше относится к настройкам сервера, чем к самому Laravel.

#вопросы_с_собеседований
👍15👾1
Property hooks на практике

В грядущем обновлении PHP 8.4 планируется добавить две значимые функции: property hooks и асимметричную видимость (асимметричный доступ к свойствам, aviz). Эти нововведения разработали Илия Товило и автор статьи, работавшие над ними два года.

Property hooks позволяют избавиться от необходимости создавать методы-геттеры и сеттеры «на всякий случай». Новая система управления свойствами позволит разработчикам добавлять логику к доступу свойств, когда это необходимо. Например, можно реализовать свойства в интерфейсах, не используя лишний код, и задавать гибкие настройки для интерфейсных свойств.

Пример из проекта автора: система, которая управляет файловыми страницами (Page) в директории (Folder). Страницы могут включать метаданные, такие как название, описание, теги и дату последнего изменения. В версии PHP 8.3 разработчикам приходилось создавать дополнительные методы для доступа к каждому свойству. С property hooks это стало проще и чище, так как теперь можно работать с интерфейсными свойствами напрямую.
👏5🎉5
Директива @env_required() позволяет проверять, что переменная среды установлена и имеет значение, отличное от null. Она может быть полезна для обеспечения того, чтобы приложение работало правильно только при наличии определенных переменных среды.

В нашем примере директива @env_required() используется для проверки переменной среды APP_KEY. Если переменная не установлена, будет выброшено исключение.
5🔥2😁2🤔1
Привет, друзья! 👋

Мы готовим статью о секретах мастерства в программировании и хотим узнать ваше мнение! 💻

Какие качества, по вашему мнению, отличают действительно выдающегося программиста? 🏆
🥱4👍1👏1
Очереди задач: простой способ пакетной обработки

Как работает очередь задач на примере создания миниатюр для видео.

Цель: после загрузки видео оно должно высветиться в виде миниатюры
👍7🔥3🥰2
#дайджест новостей по PHP за неделю:

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

🔎PHP 8.2.25 и PHP 8.3.13 выпущены! — Команда разработчиков PHP объявляет о скором выходе PHP 8.2.25 и PHP 8.3.13. Это релиз, исправляющий ошибки. Всем пользователям PHP 8.3 рекомендуется обновиться до этой версии.

🔎Выпущен Symfony 7.2.0-BETA1

🔎Выпущен Symfony 7.1.6
1👍4
Стратегия оптимизации производительности Laravel: от анализа исходного кода к реальной практике

Чтобы повысить производительность проектов на Laravel, разработчикам стоит использовать многогранный подход к оптимизации. Здесь рассмотрены ключевые стратегии, которые помогают ускорить работу приложений на Laravel, как с точки зрения кода, так и практической настройки.
1🥱8👍21