TGViewer
Channel Public Channel
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

@phpproglib

Все самое полезное для пхпшника в одном канале.

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

Учиться у нас: clc.to/M561SQ

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Subscribers
10.5K
Photos
1.8K
Videos
31
Links
4.6K

Showing posts older than #4969 · Back to latest

Older Posts 19 shown
Post #4968 2.68K
Привет, друзья! 👋

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

Какие качества, по вашему мнению, отличают действительно выдающегося программиста? 🏆
  • 🥱 4
  • 👍 1
  • 👏 1
Post #4966 3.01K
Property hooks на практике

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

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

Пример из проекта автора: система, которая управляет файловыми страницами (Page) в директории (Folder). Страницы могут включать метаданные, такие как название, описание, теги и дату последнего изменения. В версии PHP 8.3 разработчикам приходилось создавать дополнительные методы для доступа к каждому свойству. С property hooks это стало проще и чище, так как теперь можно работать с интерфейсными свойствами напрямую.
PeakD Property hooks in Practice | PeakD Property hooks, asymmetric visibility, interface properties... PHP 8.4 has hot new features. Let's see them in action.... by crell
  • 👏 5
  • 🎉 5
Post #4965 2.78K
Какие техники вы используете для оптимизации запросов к базе данных в 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
Post #4963 3.62K
#memes
  • 😢 37
  • 😁 15
  • 👏 2
  • 👍 1
Post #4961 2.68K
#хочу_спросить

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

Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel

#дайджест #phpdevjob

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

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

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

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

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

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

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

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

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

Понравились вакансии?
❤️ — да
🤔 — нет
spb.hh.ru Вакансия Junior PHP-разработчик в Санкт-Петербурге, работа в компании Неватрип (вакансия в архиве c 21 ноября 2024) Зарплата: от 60000 до 90000 ₽ за месяц. Санкт-Петербург. Требуемый опыт: не требуется. Полная занятость. Дата публикации: 24.10.2024.
  • 😁 5
  • ❤ 3
  • 😢 1
Post #4958 2.66K
💬Знаете ли вы, что вы можете использовать «scan» в Laravel для разбора строки, введенной в коллекцию, в соответствии с форматом, поддерживаемым встроенной функцией PHP «sscanf»? 🚀
  • 👍 7
  • 🥱 4
  • 🔥 1
  • 👾 1
Post #4957 2.87K
Как обновить устаревшую функцию PHPUnit withConsecutive()

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

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

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

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

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

Кроме того, с использованием обычного PHP-кода можно легко внедрять в тесты необходимые исключения, возвращаемые значения и прочие проверки. Такой подход делает тесты проще и гибче, а код становится более поддерживаемым.
  • 🎉 5
  • ❤ 2
  • 👍 1
Post #4955 3.05K
Какое криптографическое расширение предоставляет возможность генерации и проверки цифровых подписей?

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

#вопросы_с_собеседований
  • 👍 7
Post #4954 2.85K
#memes
  • 🥱 18
  • 😁 10
  • 🤔 3
  • 😢 1
Post #4953 3.09K
Loupe

Полнотекстовая поисковая система с токенизацией, стеммингом, устойчивостью к опечаткам, фильтрами и географической поддержкой, основанная на чистом PHP и SQLite.
GitHub GitHub - loupe-php/loupe: A full text search engine with tokenization, stemming, typo tolerance, filters and geo support based… A full text search engine with tokenization, stemming, typo tolerance, filters and geo support based on only PHP and SQLite. - loupe-php/loupe
  • 👍 5
  • 🤩 5
Post #4952 2.95K
Куда движется Laravel? Обзор интервью с Taylor Otwell

На канале ThePrimeTime недавно вышло интервью с создателем Laravel Тейлором, и здесь находится обзор этого интервью на русском языке
YouTube Laravel Creator talks PHP, Lambos, and VC Today we talk with Taylor Otwell, the creator of Laravel. We start at Laravel's humble beginnings and move all the way to the exciting new Series A raise with Accel and all that it is enabling Laravel to do today! Audio only versions of this podcast are…
  • 👍 11
  • 😢 3
  • 👾 1
Post #4951 2.57K

Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin

📊🚀 Почему все говорят о Kafka?

Хочешь узнать, как обрабатывать миллионы событий в секунду и почему такие гиганты, как Netflix и Uber, без ума от Kafka? Давай разберемся, как этот инструмент может превратить поток данных в золотую жилу для твоего проекта.

Читать статью
  • 👍 3
Post #4950 2.92K
Глубокое погружение в сессии в Laravel

При создании приложений Laravel почти гарантированно придется иметь дело с сессиями. Они являются фундаментальной частью веб-разработки.

В этой статье рассказано о том, что такое сессии, как они работают в Laravel и как вы можете работать с ними в своих приложениях.

Затем будет показано, как можно взаимодействовать с сессиями, используя «классы сессий», чтобы избежать распространенных ошибок, которые часто встречаются при работе над приложениями Laravel, а также, как можно тестировать данные сессий в Laravel.
Laravel News A Deep Dive into Sessions in Laravel - Laravel News A Deep Dive into Sessions in Laravel
  • 🔥 6
  • 👍 2
  • 🎉 1
Post #4949 20.6K
💻🤔 Код сожаления: 10 ошибок, о которых жалеют даже опытные программисты

В программировании полно разных путей и нет единственно правильного способа достичь вершины мастерства. Но есть общие ловушки.


✔️Читать статью
  • 👍 5
Post #4948 2.86K
PostgreSQL захватил мир баз данных

На карточке показано, как PostgreSQL интегрируется с различными системами и инструментами
  • 👍 14
  • 🔥 3
Post #4947 2.88K
У каждого такое было...

Давайте в комментариях соберём лучшие отмазки для айтишников.

Начинаем: «Не баг, а фича». Продолжаем 👇
  • 👍 5
Post #4945 30K
🧪 Чем заменить Postman: 5 отличных инструментов для разработки API

Postman долгое время был основным инструментом для разработки и тестирования API, но сейчас для большинства разработчиков его ограничения стали перевешивать преимущества. Рассмотрим альтернативные инструменты, которые могут предложить больше возможностей, чем Postman — даже в бесплатной версии.

👉Читаем здесь
  • 🥱 8
  • 🎉 4
  • 👍 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →