Оптимизация скорости работы PHP кода 🏎️
Сегодня я покажу вам несколько простых, но эффективных способов ускорить выполнение PHP-скриптов. Оптимизация кода – важная часть работы разработчика, ведь никто не любит медленные сайты. 🚀
🔥 1. Избегайте лишних запросов к БД
Частая ошибка – несколько одинаковых запросов к базе данных в одном запросе. Используйте кэширование (
🔥 2. Используйте
Функция
🔥 3. Не злоупотребляйте
Если у вас массив с десятками тысяч элементов, попробуйте
🔥 4. Подключайте файлы правильно
Разница между
🔥 5. Включите OPCache
OPCache кэширует байт-код PHP и ускоряет его выполнение в разы. Включите его в
🔥 6. Используйте
Функция
✅ Оптимизация PHP кода — это не магия, а грамотный подход к написанию скриптов. Используйте эти советы, и ваши проекты станут быстрее!
Какой из этих способов уже применяете в своих проектах? Делитесь в комментариях! 👇
👉 @php_lib
Сегодня я покажу вам несколько простых, но эффективных способов ускорить выполнение PHP-скриптов. Оптимизация кода – важная часть работы разработчика, ведь никто не любит медленные сайты. 🚀
🔥 1. Избегайте лишних запросов к БД
Частая ошибка – несколько одинаковых запросов к базе данных в одном запросе. Используйте кэширование (
Redis
, Memcached
), а если данные редко меняются – сохраняйте их в файл. 🔥 2. Используйте
isset()
вместо array_key_exists()
Функция
isset()
работает быстрее, чем array_key_exists()
, потому что она не только проверяет наличие ключа, но и сразу его значение.
// Медленный вариант
if (array_key_exists('key', $array)) { }
// Быстрый вариант
if (isset($array['key'])) { }
🔥 3. Не злоупотребляйте
foreach
при больших объемах данных Если у вас массив с десятками тысяч элементов, попробуйте
array_map()
или array_walk()
– они работают быстрее за счет встроенной оптимизации в C. 🔥 4. Подключайте файлы правильно
Разница между
require
, include
, require_once
и include_once
может сильно повлиять на производительность. require_once
проверяет, был ли уже подключен файл, что замедляет выполнение. Если точно знаете, что файл не дублируется – используйте require
. 🔥 5. Включите OPCache
OPCache кэширует байт-код PHP и ускоряет его выполнение в разы. Включите его в
php.ini
:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
🔥 6. Используйте
json_encode()
вместо serialize()
Функция
json_encode()
работает быстрее, чем serialize()
, и при этом генерирует более компактные данные.
$data = ['name' => 'John', 'age' => 25];
// Медленный вариант
$serialized = serialize($data);
// Быстрый вариант
$json = json_encode($data);
✅ Оптимизация PHP кода — это не магия, а грамотный подход к написанию скриптов. Используйте эти советы, и ваши проекты станут быстрее!
Какой из этих способов уже применяете в своих проектах? Делитесь в комментариях! 👇
👉 @php_lib
🔥 Как избежать проблем с
Сегодня разберём две часто используемые функции в PHP —
📌
Функция
❗ Пример подвоха:
Если переменной вообще нет в коде — тоже будет
📌
Функция
❗ Пустыми считаются:
-
-
-
-
-
-
Пример:
⚠️ Ошибка: проверка
🔥 Лучший подход?
Используйте строгие проверки:
Если проверяете массивы, то:
Вывод: не злоупотребляйте
👉 @php_lib
isset()
и empty()
в PHP? Сегодня разберём две часто используемые функции в PHP —
isset()
и empty()
, которые могут вести себя не так, как вы ожидаете. 📌
isset()
Функция
isset($var)
проверяет, была ли переменная установлена и не равна ли она null
. ❗ Пример подвоха:
$var = null;
var_dump(isset($var)); // false
Если переменной вообще нет в коде — тоже будет
false
. 📌
empty()
Функция
empty($var)
проверяет, считается ли переменная "пустой". ❗ Пустыми считаются:
-
""
(пустая строка)-
0
(число)-
"0"
(строка с нулём)-
null
-
false
-
[]
(пустой массив)Пример:
$var = "0";
var_dump(empty($var)); // true, хотя строка не null
⚠️ Ошибка: проверка
if (!isset($var) || empty($var))
может привести к неожиданному результату. 🔥 Лучший подход?
Используйте строгие проверки:
if ($var === null) { /* Переменная null */ }
if ($var === '') { /* Пустая строка */ }
if ($var === 0) { /* Число 0 */ }
Если проверяете массивы, то:
if (count($var) === 0) { /* Массив пуст */ }
Вывод: не злоупотребляйте
isset()
и empty()
, а проверяйте переменные строго! 👉 @php_lib
Оптимизация SQL-запросов в PHP: избавляемся от тормозов! 🚀
Сегодня я покажу вам, как улучшить производительность SQL-запросов в PHP и избавиться от лишней нагрузки на базу данных.
1. Используйте подготовленные запросы
Не только защита от SQL-инъекций, но и кеширование запросов внутри СУБД!
Пример с PDO:
2. Выбирайте только нужные данные
Зачем вам
3. Индексы – ваши друзья
Проверяйте, есть ли индексы на полях, которые часто используются в
4. Избегайте N+1 запроса
Вместо 100 мелких запросов – один с
❌ Плохо (100 запросов в цикле!):
✅ Хорошо (один запрос):
5. Используйте кеширование
Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.
Эти советы помогут вам ускорить ваш PHP-код, снизить нагрузку на базу данных и сделать сайт более отзывчивым.
👉 @php_lib
Сегодня я покажу вам, как улучшить производительность SQL-запросов в PHP и избавиться от лишней нагрузки на базу данных.
1. Используйте подготовленные запросы
Не только защита от SQL-инъекций, но и кеширование запросов внутри СУБД!
Пример с PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();
2. Выбирайте только нужные данные
Зачем вам
SELECT *
, если нужно только id
и name
? Выбирайте только нужные колонки!
$stmt = $pdo->query("SELECT id, name FROM users");
3. Индексы – ваши друзья
Проверяйте, есть ли индексы на полях, которые часто используются в
WHERE
и JOIN
. Без индексов база будет делать полный перебор строк!
CREATE INDEX idx_email ON users(email);
4. Избегайте N+1 запроса
Вместо 100 мелких запросов – один с
JOIN
. ❌ Плохо (100 запросов в цикле!):
foreach ($users as $user) {
$stmt = $pdo->prepare("SELECT * FROM orders WHERE user_id = ?");
$stmt->execute([$user['id']]);
$orders[$user['id']] = $stmt->fetchAll();
}
✅ Хорошо (один запрос):
$query = "SELECT users.id, users.name, orders.id as order_id
FROM users
LEFT JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($query);
$result = $stmt->fetchAll();
5. Используйте кеширование
Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.
$cacheKey = "users_list";
$users = $redis->get($cacheKey);
if (!$users) {
$users = $pdo->query("SELECT id, name FROM users")->fetchAll();
$redis->setex($cacheKey, 3600, json_encode($users));
}
Эти советы помогут вам ускорить ваш PHP-код, снизить нагрузку на базу данных и сделать сайт более отзывчивым.
👉 @php_lib
Как бороться с «загадочными» багами в PHP? 🤔
Сегодня хочу поговорить про одну из самых неприятных проблем в программировании — «загадочные» баги. Это те ошибки, которые возникают только в продакшене, исчезают при попытке дебага и доводят до нервного тика 😬.
🔍 Почему это происходит?
- Разные окружения — локально у вас PHP 8.2, а на сервере 7.4 (и вдруг
- Необработанные ошибки — ошибки скрыты
- Состояние кэша — в OpCache или APCu залипла старая версия кода.
- Гонки потоков — скрипты выполняются параллельно и вмешиваются друг в друга.
🛠 Как с этим бороться?
1️⃣ Выключить OpCache на тестовом сервере
Это позволит быстрее проверять изменения и исключить залипание кода.
2️⃣ Настроить логирование
Включите
3️⃣ Сравнить окружения
Используйте
4️⃣ Включить трассировку ошибок
Xdebug поможет отследить стек вызовов, а Laravel Telescope покажет внутренности запроса.
5️⃣ Повторить проблему на копии продакшена
Запустите код в Docker с конфигом продакшена или создайте staging-сервер.
6️⃣ Подключить мониторинг и алерты
Инструменты типа Sentry, Bugsnag или New Relic помогут ловить ошибки раньше, чем их заметят пользователи.
👉 @php_lib
Сегодня хочу поговорить про одну из самых неприятных проблем в программировании — «загадочные» баги. Это те ошибки, которые возникают только в продакшене, исчезают при попытке дебага и доводят до нервного тика 😬.
🔍 Почему это происходит?
- Разные окружения — локально у вас PHP 8.2, а на сервере 7.4 (и вдруг
match
ломает весь код). - Необработанные ошибки — ошибки скрыты
@
, а логи молчат. - Состояние кэша — в OpCache или APCu залипла старая версия кода.
- Гонки потоков — скрипты выполняются параллельно и вмешиваются друг в друга.
🛠 Как с этим бороться?
1️⃣ Выключить OpCache на тестовом сервере
Это позволит быстрее проверять изменения и исключить залипание кода.
2️⃣ Настроить логирование
Включите
error_reporting(E_ALL)
и убедитесь, что display_errors=Off
, а log_errors=On
с путём к файлу логов. 3️⃣ Сравнить окружения
Используйте
phpinfo()
или php -m
для проверки версий PHP и установленных модулей. 4️⃣ Включить трассировку ошибок
Xdebug поможет отследить стек вызовов, а Laravel Telescope покажет внутренности запроса.
5️⃣ Повторить проблему на копии продакшена
Запустите код в Docker с конфигом продакшена или создайте staging-сервер.
6️⃣ Подключить мониторинг и алерты
Инструменты типа Sentry, Bugsnag или New Relic помогут ловить ошибки раньше, чем их заметят пользователи.
👉 @php_lib
Сегодня покажу вам простую, но мощную технику, которая может прокачать ваш PHP-код — Value Object вместо простых типов.
Мы часто передаём параметры как
Допустим, у вас есть метод:
А теперь скажите честно — сколько раз вы ловили себя на том, что
Вот тут и приходят на помощь Value Object'ы:
Теперь ваш метод будет выглядеть так:
Что мы получаем:
- Валидность данных гарантируется на этапе создания объекта.
- Код становится самодокументируемым — не нужно читать описание, чтобы понять, что именно сюда передаётся.
- IDE и статическая проверка типа не дадут случайно передать
Да, это чуть больше кода. Но это тот случай, когда "больше" — значит надёжнее.
👉 @php_lib
Мы часто передаём параметры как
string
, int
, array
. Всё просто и понятно. Но как только бизнес-логика усложняется — типы начинают нас подводить.Допустим, у вас есть метод:
function sendSms(string $phoneNumber, string $message): void
А теперь скажите честно — сколько раз вы ловили себя на том, что
phoneNumber
передаётся в неправильном формате? Или вовсе пустым? Или из другой страны, а вы это не предусмотрели?Вот тут и приходят на помощь Value Object'ы:
final class PhoneNumber
{
public function __construct(private string $number)
{
if (!preg_match('/^\+7\d{10}$/', $number)) {
throw new InvalidArgumentException('Invalid phone number');
}
}
public function value(): string
{
return $this->number;
}
}
Теперь ваш метод будет выглядеть так:
function sendSms(PhoneNumber $phoneNumber, Message $message): void
Что мы получаем:
- Валидность данных гарантируется на этапе создания объекта.
- Код становится самодокументируемым — не нужно читать описание, чтобы понять, что именно сюда передаётся.
- IDE и статическая проверка типа не дадут случайно передать
email
вместо phone
.Да, это чуть больше кода. Но это тот случай, когда "больше" — значит надёжнее.
👉 @php_lib
⚡️Laravel — это не просто PHP-фреймворк, а инструмент, который меняет подход к веб-разработке. Он помогает писать чистый, поддерживаемый код, ускоряет работу и открывает доступ к мощному инструментарию, который используется в крупных проектах.
Если вы уже работаете с PHP, но хотите выйти на новый уровень, Laravel — ваш лучший выбор. Мы научим вас грамотно использовать этот фреймворк, обеспечивать безопасность приложений, развертывать код и использовать встроенные инструменты для ускорения разработки.
Программа курса строится на реальных задачах и практике. Вы научитесь применять Laravel в продакшен-разработке. А поддержка опытных менторов и разбор сложных кейсов помогут вам быстрее освоить фреймворк и прокачать навыки.
👉Пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cKaGUc
Если вы уже работаете с PHP, но хотите выйти на новый уровень, Laravel — ваш лучший выбор. Мы научим вас грамотно использовать этот фреймворк, обеспечивать безопасность приложений, развертывать код и использовать встроенные инструменты для ускорения разработки.
Программа курса строится на реальных задачах и практике. Вы научитесь применять Laravel в продакшен-разработке. А поддержка опытных менторов и разбор сложных кейсов помогут вам быстрее освоить фреймворк и прокачать навыки.
👉Пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cKaGUc
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Подборка Telegram каналов для программистов
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.me/DevLab1C 1С:Предприятие 8
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://t.me/Excel_lifehack
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.me/DevLab1C 1С:Предприятие 8
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://t.me/Excel_lifehack
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
Сегодня я покажу вам, как удобно работать с
На Laravel всё просто — встроенная поддержка через
Что делаю я
1. Ставим библиотеку:
2. Создаем
3. Загружаем переменные в PHP:
> Важно:
💡 Совет: не забывай добавлять
А вы как храните конфиги? Может, кто-то уже ушёл в сторону
Поделитесь в комментах 👇
👉 @php_lib
.env
файлами в PHP проектах, особенно если вы используете не Laravel.На Laravel всё просто — встроенная поддержка через
vlucas/phpdotenv
. Но если у вас кастомный фреймворк или "самопис", тоже можно легко организовать работу с переменными окружения.Что делаю я
1. Ставим библиотеку:
composer require vlucas/phpdotenv
2. Создаем
.env
файл в корне проекта:
APP_ENV=local
DB_HOST=localhost
DB_NAME=test
3. Загружаем переменные в PHP:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
// теперь можно использовать $_ENV['DB_HOST'] или getenv('DB_HOST')
> Важно:
createImmutable
с PHP 7.1+ — безопасный вариант, не перезаписывает уже установленные переменные окружения.💡 Совет: не забывай добавлять
.env
в .gitignore
и создавать .env.example
с шаблоном. Это поможет команде и тебе в будущем.А вы как храните конфиги? Может, кто-то уже ушёл в сторону
symfony/dotenv
или вообще в Docker secrets
?Поделитесь в комментах 👇
👉 @php_lib
🔥Laravel — мощный PHP-фреймворк, но его скорость может быть ограничена стандартной связкой Nginx + PHP-FPM. Хотите разогнать своё приложение и сократить время отклика?
На открытом вебинаре 3 апреля в 20:00 мск разберём, как интегрировать Laravel с Roadrunner — высокопроизводительным сервером, который меняет подход к обработке запросов. Используем Octane, оптимизируем ресурсы и ускорим выполнение кода.
Вы научитесь подключать Roadrunner к своим проектам, поймёте, как он меняет жизненный цикл PHP-приложения, и сможете внедрить передовые технологии для масштабирования ваших сервисов.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKmAST
На открытом вебинаре 3 апреля в 20:00 мск разберём, как интегрировать Laravel с Roadrunner — высокопроизводительным сервером, который меняет подход к обработке запросов. Используем Octane, оптимизируем ресурсы и ускорим выполнение кода.
Вы научитесь подключать Roadrunner к своим проектам, поймёте, как он меняет жизненный цикл PHP-приложения, и сможете внедрить передовые технологии для масштабирования ваших сервисов.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKmAST
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сегодня покажу вам простой, но очень удобный приём, который помогает наводить порядок в больших PHP-проектах — использование кастомных коллекций вместо массивов.
Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или
Я стал использовать свои классы коллекций. Простой пример:
Теперь везде, где раньше был
- типизацию (и защиту от мусора),
- автодополнение в IDE,
- методы прямо в коллекции (например,
- чище и понятнее сигнатуры методов.
Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым.
Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
👉 @php_lib
Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или
null
— и привет, баги.Я стал использовать свои классы коллекций. Простой пример:
class UserCollection
{
/** @var User[] */
private array $users = [];
public function __construct(array $users = [])
{
foreach ($users as $user) {
$this->add($user);
}
}
public function add(User $user): void
{
$this->users[] = $user;
}
public function all(): array
{
return $this->users;
}
public function filterByActive(): self
{
return new self(array_filter($this->users, fn(User $u) => $u->isActive()));
}
// и так далее
}
Теперь везде, где раньше был
User[]
, я работаю с UserCollection
. Это сразу даёт:- типизацию (и защиту от мусора),
- автодополнение в IDE,
- методы прямо в коллекции (например,
filterByActive
, sortByName
, first()
и т.д.),- чище и понятнее сигнатуры методов.
Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым.
Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
👉 @php_lib
💬 Хочешь прокачать навыки архитектуры на PHP за один вечер?
❗️Даже опытные PHP-разработчики сталкиваются с выбором: богатая или анемичная модель? CQRS или Event Sourcing? REST API или что-то сложнее?
📌 Разложим всё по полочкам на бесплатном авторском вебинаре Дмитрия Кириллова:
- узнаете, как упростить разработку с помощью грамотно выстроенной архитектуры
- научитесь осознанно выбирать инструмент под задачу
- посмотрите на полезные практические приёмы
Превратите архитектуру в своё конкурентное преимущество. Освойте подходы, которые реально работают в "бою" — и стань увереннее в любом проекте, от MVP до highload.
➡️ Регистрируйтесь прямо сейчас: https://vk.cc/cKpX2Q
Приходите на открытый урок 8 апреля в 20:00 мск. Участники получат скидку на курс «PHP Developer. Professional».
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❗️Даже опытные PHP-разработчики сталкиваются с выбором: богатая или анемичная модель? CQRS или Event Sourcing? REST API или что-то сложнее?
- узнаете, как упростить разработку с помощью грамотно выстроенной архитектуры
- научитесь осознанно выбирать инструмент под задачу
- посмотрите на полезные практические приёмы
Превратите архитектуру в своё конкурентное преимущество. Освойте подходы, которые реально работают в "бою" — и стань увереннее в любом проекте, от MVP до highload.
Приходите на открытый урок 8 апреля в 20:00 мск. Участники получат скидку на курс «PHP Developer. Professional».
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня я покажу вам, как я упростил настройку и запуск Laravel-проектов с помощью кастомной Make-команды.
Когда ты постоянно работаешь с Laravel, мелочи вроде
Я решил: хватит.
Создал для себя простую Makefile-команду, которая за секунды поднимает проект в нужной последовательности. Вот пример:
Теперь я просто пишу
Можно добавить другие команды:
💡 Совет: обязательно ставь
👉 @php_lib
Когда ты постоянно работаешь с Laravel, мелочи вроде
php artisan migrate
, npm run dev
, php artisan serve
, php artisan key:generate
превращаются в рутину. А если ещё и несколько проектов — путаницы не избежать.Я решил: хватит.
Создал для себя простую Makefile-команду, которая за секунды поднимает проект в нужной последовательности. Вот пример:
up:
@cp .env.example .env || true
@php artisan key:generate
@composer install
@npm install
@php artisan migrate
@php artisan db:seed
@npm run dev
@php artisan serve
Теперь я просто пишу
make up
— и Laravel взлетает 🚀Можно добавить другие команды:
make test
, make down
, make fresh
, make lint
, и каждый проект становится управляемым по единому сценарию. Это экономит часы за месяц.💡 Совет: обязательно ставь
@
перед командами — так терминал не будет засорён выводом самих строк Makefile.👉 @php_lib
Сегодня я покажу вам одну фичу PHP, которую многие или не знают, или забывают использовать — array destructuring. А зря!
Смотрите, вместо привычного:
Можно писать так:
Код стал чище, короче и понятнее. Особенно приятно, когда возвращается ассоциативный массив — не надо писать вручную кучу
Или с обычными массивами:
Разворот массива работает с любой нумерацией — главное, чтобы структура соответствовала.
💡 Применяю это часто в контроллерах, в тестах и когда разбираю конфиги. Удобно и читаемо.
👉 @php_lib
Смотрите, вместо привычного:
$user = getUser(); // ['name' => 'Ivan', 'email' => 'ivan@example.com']
$name = $user['name'];
$email = $user['email'];
Можно писать так:
['name' => $name, 'email' => $email] = getUser();
Код стал чище, короче и понятнее. Особенно приятно, когда возвращается ассоциативный массив — не надо писать вручную кучу
$data['ключ']
.Или с обычными массивами:
[$id, $name, $email] = getUserArray(); // [1, 'Ivan', 'ivan@example.com']
Разворот массива работает с любой нумерацией — главное, чтобы структура соответствовала.
💡 Применяю это часто в контроллерах, в тестах и когда разбираю конфиги. Удобно и читаемо.
👉 @php_lib
Как настроить мониторинг с помощью Grafana для PHP-приложений?
Каждый PHP-разработчик рано или поздно сталкивается с необходимостью мониторинга своих приложений. Сложные системы требуют эффективных инструментов для отслеживания их работы. Одним из таких инструментов является Grafana — мощное средство для визуализации данных и настройки алертов, которое делает мониторинг простым и наглядным.
На открытом вебинаре 15 апреля в 20:00 мск вы научитесь:
- Подключать различные источники данных, такие как Graphite и PostgreSQL.
- Визуализировать данные с помощью гибких и информативных графиков.
- Настраивать алерты, чтобы получать уведомления о критических событиях.
Присоединяйтесь к вебинару и получите скидку на большое обучение «PHP Developer. Professional.
Регистрируйтесь прямо сейчас: https://vk.cc/cKFYw2
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Каждый PHP-разработчик рано или поздно сталкивается с необходимостью мониторинга своих приложений. Сложные системы требуют эффективных инструментов для отслеживания их работы. Одним из таких инструментов является Grafana — мощное средство для визуализации данных и настройки алертов, которое делает мониторинг простым и наглядным.
На открытом вебинаре 15 апреля в 20:00 мск вы научитесь:
- Подключать различные источники данных, такие как Graphite и PostgreSQL.
- Визуализировать данные с помощью гибких и информативных графиков.
- Настраивать алерты, чтобы получать уведомления о критических событиях.
Присоединяйтесь к вебинару и получите скидку на большое обучение «PHP Developer. Professional.
Регистрируйтесь прямо сейчас: https://vk.cc/cKFYw2
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔍 Как логировать все входящие параметры в методы классов
Представим, что у нас есть большой проект с кучей классов, и в одном месте какая-то логика работает не так, как ожидалось. Часто хочется понять: а с какими аргументами вообще вызывается метод?
Вот удобный способ — использовать
🧠 Профит: когда метод вызывается, вы сразу в логе видите:
- с какими аргументами он был вызван
- откуда он был вызван (файл и строка)
Это суперполезно в проде, когда нет возможности ставить дебаггер, а нужно поймать, что пошло не так.
📌 Совет: делайте
👉 @php_lib
Представим, что у нас есть большой проект с кучей классов, и в одном месте какая-то логика работает не так, как ожидалось. Часто хочется понять: а с какими аргументами вообще вызывается метод?
Вот удобный способ — использовать
debug_backtrace()
и func_get_args()
:
class SomeService {
public function process($userId, $data) {
$this->logArgs(__METHOD__);
// Дальше идёт логика
}
protected function logArgs($methodName) {
$args = func_get_args();
array_shift($args); // Убираем $methodName
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1];
error_log(sprintf(
"[%s] Called from %s:%s with args: %s",
$methodName,
$trace['file'] ?? 'n/a',
$trace['line'] ?? 'n/a',
json_encode($args, JSON_UNESCAPED_UNICODE)
));
}
}
🧠 Профит: когда метод вызывается, вы сразу в логе видите:
- с какими аргументами он был вызван
- откуда он был вызван (файл и строка)
Это суперполезно в проде, когда нет возможности ставить дебаггер, а нужно поймать, что пошло не так.
📌 Совет: делайте
logArgs()
общим методом в базовом классе и логируйте важные вызовы на проде, оборачивая условием по уровню логирования или флагу.👉 @php_lib
.🛠 Как логировать SQL-запросы только при ошибках
Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь!
🔍 Решение
Добавьте следующий сниппет в
🔐 Пояснение
- При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception.
- Если да — логируем SQL.
- Используем отдельный лог-канал
👉 Создайте в
Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов.
👉 @php_lib
Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь!
🔍 Решение
Добавьте следующий сниппет в
AppServiceProvider
:
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
public function boot()
{
DB::listen(function ($query) {
if (app()->bound('exception.logged')) {
Log::channel('sql')->debug($query->sql, $query->bindings);
}
});
app()->singleton('exception.logged', function () {
return true;
});
app()->error(function (\Throwable $e) {
app()->instance('exception.logged', true);
});
}
🔐 Пояснение
- При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception.
- Если да — логируем SQL.
- Используем отдельный лог-канал
sql
, чтобы не засорять основной laravel.log
.👉 Создайте в
config/logging.php
канал sql
, направьте его в отдельный файл, например storage/logs/sql.log
.Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов.
👉 @php_lib
⚡️Laravel — удобный PHP-фреймворк, а его возможности выходят далеко за рамки классической веб-разработки. Хотите увидеть, как он помогает автоматизировать реальные процессы?
На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana.
Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKIOcm
На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana.
Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266.
👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://vk.cc/cKIOcm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сегодня речь пойдёт о типах в PHP и как правильно их использовать в вашем проекте.
🧠 Сила строгой типизации в PHP
В PHP 7 мы получили возможность указывать типы аргументов и возвращаемых значений. В PHP 8 всё стало ещё строже. Но многие до сих пор этим пренебрегают — зря!
Вот пример. Допустим, у вас есть функция:
А теперь тот же код с типами:
Плюсы второго варианта:
- Автоматическая проверка типов во время выполнения
- IDE подсказывает, если вы передаёте что-то не то
- Код самодокументируемый
- Проще писать тесты
🔐 Совет от меня: включите строгий режим в начале всех ваших файлов:
Это заставит PHP быть более строго типизированным и поможет ловить ошибки ещё до выполнения логики.
💬 А вы используете строгую типизацию? Или всё ещё пишете
Поделитесь опытом в комментариях👇
👉 @php_lib
🧠 Сила строгой типизации в PHP
В PHP 7 мы получили возможность указывать типы аргументов и возвращаемых значений. В PHP 8 всё стало ещё строже. Но многие до сих пор этим пренебрегают — зря!
Вот пример. Допустим, у вас есть функция:
function calculateTotal($price, $quantity) {
return $price * $quantity;
}
А теперь тот же код с типами:
function calculateTotal(float $price, int $quantity): float {
return $price * $quantity;
}
Плюсы второго варианта:
- Автоматическая проверка типов во время выполнения
- IDE подсказывает, если вы передаёте что-то не то
- Код самодокументируемый
- Проще писать тесты
🔐 Совет от меня: включите строгий режим в начале всех ваших файлов:
declare(strict_types=1);
Это заставит PHP быть более строго типизированным и поможет ловить ошибки ещё до выполнения логики.
💬 А вы используете строгую типизацию? Или всё ещё пишете
$data = getData();
и надеетесь, что там будет то, что вы ожидаете?Поделитесь опытом в комментариях👇
👉 @php_lib
🚀 Подпишись и прокачай свои скилы: лучшие каналы для IT-специалистов 👨💻📲
Папка с каналами для DevOps, Linux - Windows СисАдминов👍
Папка с каналами для 1С программистов🧑💻
Папка с каналами для C++ программистов👩💻
Папка с каналами для Python программистов👩💻
Папка с каналами для Java программистов🖥
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)💻
GitHub Сообщество🧑💻
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base)🖥
https://t.me/database_info Все про базы данных
Разработка игр📱
https://t.me/game_devv Все о разработке игр
БигДата, машинное обучение🖥
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование🖥
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность💻
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free
Книги, статьи для дизайнеров🎨
https://t.me/ux_web Статьи, книги для дизайнеров
Математика🧮
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак🙃
https://t.me/Excel_lifehack
Технологии🖥
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии💰
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
https://t.me/rabota1C_rus Вакансии для программистов 1С
Папка с каналами для DevOps, Linux - Windows СисАдминов
Папка с каналами для 1С программистов
Папка с каналами для C++ программистов
Папка с каналами для Python программистов
Папка с каналами для Java программистов
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)
GitHub Сообщество
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base)
https://t.me/database_info Все про базы данных
Разработка игр
https://t.me/game_devv Все о разработке игр
БигДата, машинное обучение
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free
Книги, статьи для дизайнеров
https://t.me/ux_web Статьи, книги для дизайнеров
Математика
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак
https://t.me/Excel_lifehack
Технологии
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
https://t.me/rabota1C_rus Вакансии для программистов 1С
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Админ Devops
You’ve been invited to add the folder “Админ Devops”, which includes 18 chats.
Сегодня я хочу поговорить о том, как избавиться от дублирования кода в Laravel, особенно в тех местах, где это совсем не бросается в глаза — в валидации запросов.
✋ Проблема
У тебя есть формы на создание и обновление сущности. И в обоих случаях в контроллере или Form Request’ах ты пишешь одинаковые правила валидации, только с небольшими отличиями.
Пример:
✅ Решение — базовый класс с общими правилами
Создай абстрактный класс с общими правилами:
А потом в наследниках добавляй нужные модификаторы:
🤔 Альтернатива — кастомная Rule-комбинация
Можно пойти дальше и использовать кастомные Rule-классы, если валидация становится сложной и завязанной на бизнес-логику.
Я часто вижу дублирование в валидации, особенно в старых проектах. Убрав это, код становится чище, а изменения в правилах — в разы проще.
А ты как организуешь валидацию? Используешь Form Request или валидируешь прямо в контроллере?
👉 @php_lib
✋ Проблема
У тебя есть формы на создание и обновление сущности. И в обоих случаях в контроллере или Form Request’ах ты пишешь одинаковые правила валидации, только с небольшими отличиями.
Пример:
// StorePostRequest.php
return [
'title' => 'required|string|max:255',
'content' => 'required',
];
// UpdatePostRequest.php
return [
'title' => 'sometimes|required|string|max:255',
'content' => 'sometimes|required',
];
✅ Решение — базовый класс с общими правилами
Создай абстрактный класс с общими правилами:
abstract class BasePostRequest extends FormRequest
{
protected function commonRules(): array
{
return [
'title' => 'string|max:255',
'content' => 'string',
];
}
}
А потом в наследниках добавляй нужные модификаторы:
// StorePostRequest.php
class StorePostRequest extends BasePostRequest
{
public function rules(): array
{
return array_merge([
'title' => 'required',
'content' => 'required',
], $this->commonRules());
}
}
// UpdatePostRequest.php
class UpdatePostRequest extends BasePostRequest
{
public function rules(): array
{
return array_merge([
'title' => 'sometimes|required',
'content' => 'sometimes|required',
], $this->commonRules());
}
}
🤔 Альтернатива — кастомная Rule-комбинация
Можно пойти дальше и использовать кастомные Rule-классы, если валидация становится сложной и завязанной на бизнес-логику.
Я часто вижу дублирование в валидации, особенно в старых проектах. Убрав это, код становится чище, а изменения в правилах — в разы проще.
А ты как организуешь валидацию? Используешь Form Request или валидируешь прямо в контроллере?
👉 @php_lib
Сегодня я покажу вам простой, но мощный способ, как ускорить отладку в Laravel при работе с большим количеством логики в контроллерах и сервисах.
🔍 Ловим баги быстрее с помощью
Обычно мы используем
Спасает Ray — инструмент от Spatie, который интегрируется с Laravel и выводит отладочную информацию в отдельное десктопное приложение.
Пример:
Ты можешь:
- выводить переменные без прерывания скрипта;
- смотреть SQL-запросы в реальном времени;
- использовать цветовые метки, чтобы различать вывод из разных участков кода.
⚙️ Установка
И по желанию установить десктоп-приложение с сайта Spatie.
В
🧠 Совет от себя
Ray особенно хорошо заходит, когда работаешь в команде — ты можешь добавить временный
Пробовали Ray? Или у вас есть свои инструменты для отладки — может, кастомные макросы или трейты? Делитесь в комментах 👇
👉 @php_lib
🔍 Ловим баги быстрее с помощью
ray()
от SpatieОбычно мы используем
dd()
или dump()
в Laravel, чтобы посмотреть, что творится с переменными. Но как только проект становится крупнее — эти методы начинают мешать, особенно когда нужно отслеживать несколько значений в разных местах.Спасает Ray — инструмент от Spatie, который интегрируется с Laravel и выводит отладочную информацию в отдельное десктопное приложение.
Пример:
ray($user);
ray($order)->blue();
ray()->showQueries();
Ты можешь:
- выводить переменные без прерывания скрипта;
- смотреть SQL-запросы в реальном времени;
- использовать цветовые метки, чтобы различать вывод из разных участков кода.
⚙️ Установка
composer require spatie/laravel-ray --dev
И по желанию установить десктоп-приложение с сайта Spatie.
В
config/ray.php
можно кастомизировать поведение: включать Ray только на dev-среде, логировать только определённые запросы и т.д.🧠 Совет от себя
Ray особенно хорошо заходит, когда работаешь в команде — ты можешь добавить временный
ray()
-лог, не ломая исполнение и не мешая другим.Пробовали Ray? Или у вас есть свои инструменты для отладки — может, кастомные макросы или трейты? Делитесь в комментах 👇
👉 @php_lib