Оптимизация скорости работы 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
🔥10❤4👍1
🔥 Как избежать проблем с
Сегодня разберём две часто используемые функции в 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
👍8
Оптимизация 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
👍8
Как бороться с «загадочными» багами в 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
👍5
Сегодня покажу вам простую, но мощную технику, которая может прокачать ваш 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
👍17
Подборка Telegram каналов для программистов
https://xn--r1a.website/bash_srv Bash Советы
https://xn--r1a.website/win_sysadmin Системный Администратор Windows
https://xn--r1a.website/lifeproger Жизнь программиста. Авторский канал.
https://xn--r1a.website/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
https://xn--r1a.website/sysadmin_girl Девочка Сисадмин
https://xn--r1a.website/srv_admin_linux Админские угодья
https://xn--r1a.website/linux_srv Типичный Сисадмин
https://xn--r1a.website/linux_odmin Linux: Системный администратор
https://xn--r1a.website/devops_star DevOps Star (Звезда Девопса)
https://xn--r1a.website/i_linux Системный администратор
https://xn--r1a.website/linuxchmod Linux
https://xn--r1a.website/sys_adminos Системный Администратор
https://xn--r1a.website/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://xn--r1a.website/sysadminof Книги для админов, полезные материалы
https://xn--r1a.website/i_odmin Все для системного администратора
https://xn--r1a.website/i_odmin_book Библиотека Системного Администратора
https://xn--r1a.website/i_odmin_chat Чат системных администраторов
https://xn--r1a.website/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://xn--r1a.website/sysadminoff Новости Линукс Linux
1C разработка 📌
https://xn--r1a.website/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://xn--r1a.website/DevLab1C 1С:Предприятие 8
Программирование C++📌
https://xn--r1a.website/cpp_lib Библиотека C/C++ разработчика
https://xn--r1a.website/cpp_knigi Книги для программистов C/C++
https://xn--r1a.website/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://xn--r1a.website/pythonofff Python академия. Учи Python быстро и легко🐍
https://xn--r1a.website/BookPython Библиотека Python разработчика
https://xn--r1a.website/python_real Python подборки на русском и английском
https://xn--r1a.website/python_360 Книги по Python Rus
Java разработка 📌
https://xn--r1a.website/BookJava Библиотека Java разработчика
https://xn--r1a.website/java_360 Книги по Java Rus
https://xn--r1a.website/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://xn--r1a.website/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://xn--r1a.website/developer_mobila Мобильная разработка
https://xn--r1a.website/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://xn--r1a.website/frontend_1 Подборки для frontend разработчиков
https://xn--r1a.website/frontend_sovet Frontend советы, примеры и практика!
https://xn--r1a.website/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://xn--r1a.website/game_devv Все о разработке игр
Библиотеки 📌
https://xn--r1a.website/book_for_dev Книги для программистов Rus
https://xn--r1a.website/programmist_of Книги по программированию
https://xn--r1a.website/proglb Библиотека программиста
https://xn--r1a.website/bfbook Книги для программистов
https://xn--r1a.website/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://xn--r1a.website/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://xn--r1a.website/bookflow Лекции, видеоуроки, доклады с IT конференций
https://xn--r1a.website/coddy_academy Полезные советы по программированию
https://xn--r1a.website/rust_lib Полезный контент по программированию на Rust
https://xn--r1a.website/golang_lib Библиотека Go (Golang) разработчика
https://xn--r1a.website/itmozg Программисты, дизайнеры, новости из мира IT
https://xn--r1a.website/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://xn--r1a.website/nodejs_lib Подборки по Node js и все что с ним связано
https://xn--r1a.website/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика 📌
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://xn--r1a.website/Excel_lifehack
https://xn--r1a.website/tikon_1 Новости высоких технологий, науки и техники💡
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
https://xn--r1a.website/bash_srv Bash Советы
https://xn--r1a.website/win_sysadmin Системный Администратор Windows
https://xn--r1a.website/lifeproger Жизнь программиста. Авторский канал.
https://xn--r1a.website/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Системное администрирование 📌
https://xn--r1a.website/sysadmin_girl Девочка Сисадмин
https://xn--r1a.website/srv_admin_linux Админские угодья
https://xn--r1a.website/linux_srv Типичный Сисадмин
https://xn--r1a.website/linux_odmin Linux: Системный администратор
https://xn--r1a.website/devops_star DevOps Star (Звезда Девопса)
https://xn--r1a.website/i_linux Системный администратор
https://xn--r1a.website/linuxchmod Linux
https://xn--r1a.website/sys_adminos Системный Администратор
https://xn--r1a.website/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://xn--r1a.website/sysadminof Книги для админов, полезные материалы
https://xn--r1a.website/i_odmin Все для системного администратора
https://xn--r1a.website/i_odmin_book Библиотека Системного Администратора
https://xn--r1a.website/i_odmin_chat Чат системных администраторов
https://xn--r1a.website/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://xn--r1a.website/sysadminoff Новости Линукс Linux
1C разработка 📌
https://xn--r1a.website/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://xn--r1a.website/DevLab1C 1С:Предприятие 8
Программирование C++📌
https://xn--r1a.website/cpp_lib Библиотека C/C++ разработчика
https://xn--r1a.website/cpp_knigi Книги для программистов C/C++
https://xn--r1a.website/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://xn--r1a.website/pythonofff Python академия. Учи Python быстро и легко🐍
https://xn--r1a.website/BookPython Библиотека Python разработчика
https://xn--r1a.website/python_real Python подборки на русском и английском
https://xn--r1a.website/python_360 Книги по Python Rus
Java разработка 📌
https://xn--r1a.website/BookJava Библиотека Java разработчика
https://xn--r1a.website/java_360 Книги по Java Rus
https://xn--r1a.website/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://xn--r1a.website/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://xn--r1a.website/developer_mobila Мобильная разработка
https://xn--r1a.website/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://xn--r1a.website/frontend_1 Подборки для frontend разработчиков
https://xn--r1a.website/frontend_sovet Frontend советы, примеры и практика!
https://xn--r1a.website/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://xn--r1a.website/game_devv Все о разработке игр
Библиотеки 📌
https://xn--r1a.website/book_for_dev Книги для программистов Rus
https://xn--r1a.website/programmist_of Книги по программированию
https://xn--r1a.website/proglb Библиотека программиста
https://xn--r1a.website/bfbook Книги для программистов
https://xn--r1a.website/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://xn--r1a.website/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://xn--r1a.website/bookflow Лекции, видеоуроки, доклады с IT конференций
https://xn--r1a.website/coddy_academy Полезные советы по программированию
https://xn--r1a.website/rust_lib Полезный контент по программированию на Rust
https://xn--r1a.website/golang_lib Библиотека Go (Golang) разработчика
https://xn--r1a.website/itmozg Программисты, дизайнеры, новости из мира IT
https://xn--r1a.website/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://xn--r1a.website/nodejs_lib Подборки по Node js и все что с ним связано
https://xn--r1a.website/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика 📌
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://xn--r1a.website/Excel_lifehack
https://xn--r1a.website/tikon_1 Новости высоких технологий, науки и техники💡
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
По всем вопросам @evgenycarter
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
По всем вопросам @evgenycarter
❤1
Сегодня я покажу вам, как удобно работать с
На 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
👍4
Сегодня покажу вам простой, но очень удобный приём, который помогает наводить порядок в больших 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
👍13
Сегодня я покажу вам, как я упростил настройку и запуск 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
👍10
Сегодня я покажу вам одну фичу 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
👍9🤔5💩1
🔍 Как логировать все входящие параметры в методы классов
Представим, что у нас есть большой проект с кучей классов, и в одном месте какая-то логика работает не так, как ожидалось. Часто хочется понять: а с какими аргументами вообще вызывается метод?
Вот удобный способ — использовать
🧠 Профит: когда метод вызывается, вы сразу в логе видите:
- с какими аргументами он был вызван
- откуда он был вызван (файл и строка)
Это суперполезно в проде, когда нет возможности ставить дебаггер, а нужно поймать, что пошло не так.
📌 Совет: делайте
👉 @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
👍5🤣2
.🛠 Как логировать 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
👍7
Сегодня речь пойдёт о типах в 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
👍3
🚀 Подпишись и прокачай свои скилы: лучшие каналы для IT-специалистов 👨💻📲
Папка с каналами для DevOps, Linux - Windows СисАдминов👍
Папка с каналами для 1С программистов🧑💻
Папка с каналами для C++ программистов👩💻
Папка с каналами для Python программистов👩💻
Папка с каналами для Java программистов🖥
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)💻
GitHub Сообщество🧑💻
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base)🖥
https://xn--r1a.website/database_info Все про базы данных
Разработка игр📱
https://xn--r1a.website/game_devv Все о разработке игр
БигДата, машинное обучение🖥
https://xn--r1a.website/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование🖥
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность💻
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров🎨
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика🧮
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак🙃
https://xn--r1a.website/Excel_lifehack
Технологии🖥
https://xn--r1a.website/tikon_1 Новости высоких технологий, науки и техники💡
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии💰
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Папка с каналами для DevOps, Linux - Windows СисАдминов
Папка с каналами для 1С программистов
Папка с каналами для C++ программистов
Папка с каналами для Python программистов
Папка с каналами для Java программистов
Папка с книгами для программистов 📚
Папка для программистов (frontend, backend, iOS, Android)
GitHub Сообщество
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base)
https://xn--r1a.website/database_info Все про базы данных
Разработка игр
https://xn--r1a.website/game_devv Все о разработке игр
БигДата, машинное обучение
https://xn--r1a.website/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
QA, тестирование
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак
https://xn--r1a.website/Excel_lifehack
Технологии
https://xn--r1a.website/tikon_1 Новости высоких технологий, науки и техники💡
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
https://xn--r1a.website/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
👍4👎4🔥2
Сегодня я покажу вам простой, но мощный способ, как ускорить отладку в 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
👍6
Сегодня я покажу вам, как удобно логировать в Laravel, не засоряя код и не превращая проект в болото из
💡 Используем каналы логирования правильно
Laravel предоставляет мощную систему логирования на базе Monolog. Но часто мы ограничиваемся дефолтным логом. А зря.
Например, создаём отдельный канал для логов оплаты:
Теперь в нужном месте можно писать:
И всё — никакой путаницы. В
👀 Бонус: helper-функция
Чтобы писать меньше:
Теперь вызываем везде просто
Пишите в комментах, какие каналы логирования вы используете и куда пишете — в файл, телегу или Sentry?
👉 @php_lib
Log::info() на каждом шагу.💡 Используем каналы логирования правильно
Laravel предоставляет мощную систему логирования на базе Monolog. Но часто мы ограничиваемся дефолтным логом. А зря.
Например, создаём отдельный канал для логов оплаты:
// config/logging.php
'channels' => [
'payment' => [
'driver' => 'single',
'path' => storage_path('logs/payment.log'),
'level' => 'info',
],
],
Теперь в нужном месте можно писать:
Log::channel('payment')->info('Платёж прошёл', ['user_id' => $user->id, 'amount' => $amount]);
И всё — никакой путаницы. В
laravel.log остаётся только то, что важно для всего проекта, а логи оплаты — отдельно. Можно и в телеграм скидывать, если настроить webhook.👀 Бонус: helper-функция
Чтобы писать меньше:
if (!function_exists('payment_log')) {
function payment_log($message, array $context = []) {
\Log::channel('payment')->info($message, $context);
}
}
Теперь вызываем везде просто
payment_log('Платёж принят').Пишите в комментах, какие каналы логирования вы используете и куда пишете — в файл, телегу или Sentry?
👉 @php_lib
👍5
Сегодня я покажу вам простой способ, как разрулить хардкорный баг с session_start() в PHP.
Недавно один подписчик столкнулся с ситуацией: скрипт падает с ошибкой "Cannot send session cache limiter - headers already sent". Думаю, каждый второй PHP-разработчик хотя бы раз в жизни это видел.
Разбираемся.
💥 Причина
Ошибка возникает, когда
✅ Как лечить
1. Ищем вывод до session_start()
- Проверь, нет ли
- Включи буферизацию
Но это костыль. Лучше всё же вычистить лишний вывод.
2. Идеальная структура файла
3. Ищи BOM
Иногда редакторы типа Notepad++ добавляют невидимый символ BOM в начало файла. Он тоже считается выводом. Решается сохранением файла в UTF-8 без BOM.
🛠 Мой способ отладки
Когда всё выглядит правильно, но ошибка всё равно есть:
- Создай новый чистый файл, вставь туда
- Используй
Это сэкономило мне кучу времени при отладке старых легаси-проектов.
👉 @php_lib
Недавно один подписчик столкнулся с ситуацией: скрипт падает с ошибкой "Cannot send session cache limiter - headers already sent". Думаю, каждый второй PHP-разработчик хотя бы раз в жизни это видел.
Разбираемся.
💥 Причина
Ошибка возникает, когда
session_start() вызывается после того, как браузеру уже отправлены заголовки. В PHP это означает — где-то до session_start() был echo, пробел вне тегов <?php ?>, или даже var_dump() для отладки. Любой вывод в браузер = PHP уже отправил заголовки. А session_start() хочет их изменить — и ловим ошибку.✅ Как лечить
1. Ищем вывод до session_start()
- Проверь, нет ли
echo, print, отладочных функций или лишних символов до вызова session_start().- Включи буферизацию
ob_start() в начале скрипта — поможет временно «глотать» вывод:
ob_start();
session_start();
Но это костыль. Лучше всё же вычистить лишний вывод.
2. Идеальная структура файла
<?php
// Никакого вывода до этого места!
session_start();
// Весь остальной код
?>
3. Ищи BOM
Иногда редакторы типа Notepad++ добавляют невидимый символ BOM в начало файла. Он тоже считается выводом. Решается сохранением файла в UTF-8 без BOM.
🛠 Мой способ отладки
Когда всё выглядит правильно, но ошибка всё равно есть:
- Создай новый чистый файл, вставь туда
session_start() — если работает, значит проблема в другом коде.- Используй
headers_sent():
if (headers_sent($file, $line)) {
echo "Вывод уже начат в $file на строке $line";
}
Это сэкономило мне кучу времени при отладке старых легаси-проектов.
👉 @php_lib
👍7
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://xn--r1a.website/bash_srv Bash Советы
https://xn--r1a.website/win_sysadmin Системный Администратор Windows
https://xn--r1a.website/sysadmin_girl Девочка Сисадмин
https://xn--r1a.website/srv_admin_linux Админские угодья
https://xn--r1a.website/linux_srv Типичный Сисадмин
https://xn--r1a.website/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://xn--r1a.website/linux_odmin Linux: Системный администратор
https://xn--r1a.website/devops_star DevOps Star (Звезда Девопса)
https://xn--r1a.website/i_linux Системный администратор
https://xn--r1a.website/linuxchmod Linux
https://xn--r1a.website/sys_adminos Системный Администратор
https://xn--r1a.website/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://xn--r1a.website/sysadminof Книги для админов, полезные материалы
https://xn--r1a.website/i_odmin Все для системного администратора
https://xn--r1a.website/i_odmin_book Библиотека Системного Администратора
https://xn--r1a.website/i_odmin_chat Чат системных администраторов
https://xn--r1a.website/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://xn--r1a.website/sysadminoff Новости Линукс Linux
1C разработка 📌
https://xn--r1a.website/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://xn--r1a.website/DevLab1C 1С:Предприятие 8
https://xn--r1a.website/razrab_1C 1C Разработчик
https://xn--r1a.website/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://xn--r1a.website/cpp_lib Библиотека C/C++ разработчика
https://xn--r1a.website/cpp_knigi Книги для программистов C/C++
https://xn--r1a.website/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://xn--r1a.website/pythonofff Python академия.
https://xn--r1a.website/BookPython Библиотека Python разработчика
https://xn--r1a.website/python_real Python подборки на русском и английском
https://xn--r1a.website/python_360 Книги по Python
Java разработка 📌
https://xn--r1a.website/BookJava Библиотека Java разработчика
https://xn--r1a.website/java_360 Книги по Java Rus
https://xn--r1a.website/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://xn--r1a.website/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://xn--r1a.website/developer_mobila Мобильная разработка
https://xn--r1a.website/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://xn--r1a.website/frontend_1 Подборки для frontend разработчиков
https://xn--r1a.website/frontend_sovet Frontend советы, примеры и практика!
https://xn--r1a.website/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://xn--r1a.website/game_devv Все о разработке игр
Библиотеки 📌
https://xn--r1a.website/book_for_dev Книги для программистов Rus
https://xn--r1a.website/programmist_of Книги по программированию
https://xn--r1a.website/proglb Библиотека программиста
https://xn--r1a.website/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://xn--r1a.website/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://xn--r1a.website/bookflow Лекции, видеоуроки, доклады с IT конференций
https://xn--r1a.website/rust_lib Полезный контент по программированию на Rust
https://xn--r1a.website/golang_lib Библиотека Go (Golang) разработчика
https://xn--r1a.website/itmozg Программисты, дизайнеры, новости из мира IT
https://xn--r1a.website/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://xn--r1a.website/nodejs_lib Подборки по Node js и все что с ним связано
https://xn--r1a.website/ruby_lib Библиотека Ruby программиста
https://xn--r1a.website/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика 📌
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
https://xn--r1a.website/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://xn--r1a.website/Excel_lifehack
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://xn--r1a.website/bash_srv Bash Советы
https://xn--r1a.website/win_sysadmin Системный Администратор Windows
https://xn--r1a.website/sysadmin_girl Девочка Сисадмин
https://xn--r1a.website/srv_admin_linux Админские угодья
https://xn--r1a.website/linux_srv Типичный Сисадмин
https://xn--r1a.website/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://xn--r1a.website/linux_odmin Linux: Системный администратор
https://xn--r1a.website/devops_star DevOps Star (Звезда Девопса)
https://xn--r1a.website/i_linux Системный администратор
https://xn--r1a.website/linuxchmod Linux
https://xn--r1a.website/sys_adminos Системный Администратор
https://xn--r1a.website/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://xn--r1a.website/sysadminof Книги для админов, полезные материалы
https://xn--r1a.website/i_odmin Все для системного администратора
https://xn--r1a.website/i_odmin_book Библиотека Системного Администратора
https://xn--r1a.website/i_odmin_chat Чат системных администраторов
https://xn--r1a.website/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://xn--r1a.website/sysadminoff Новости Линукс Linux
1C разработка 📌
https://xn--r1a.website/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://xn--r1a.website/DevLab1C 1С:Предприятие 8
https://xn--r1a.website/razrab_1C 1C Разработчик
https://xn--r1a.website/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://xn--r1a.website/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://xn--r1a.website/cpp_lib Библиотека C/C++ разработчика
https://xn--r1a.website/cpp_knigi Книги для программистов C/C++
https://xn--r1a.website/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://xn--r1a.website/pythonofff Python академия.
https://xn--r1a.website/BookPython Библиотека Python разработчика
https://xn--r1a.website/python_real Python подборки на русском и английском
https://xn--r1a.website/python_360 Книги по Python
Java разработка 📌
https://xn--r1a.website/BookJava Библиотека Java разработчика
https://xn--r1a.website/java_360 Книги по Java Rus
https://xn--r1a.website/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://xn--r1a.website/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://xn--r1a.website/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://xn--r1a.website/developer_mobila Мобильная разработка
https://xn--r1a.website/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://xn--r1a.website/frontend_1 Подборки для frontend разработчиков
https://xn--r1a.website/frontend_sovet Frontend советы, примеры и практика!
https://xn--r1a.website/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://xn--r1a.website/game_devv Все о разработке игр
Библиотеки 📌
https://xn--r1a.website/book_for_dev Книги для программистов Rus
https://xn--r1a.website/programmist_of Книги по программированию
https://xn--r1a.website/proglb Библиотека программиста
https://xn--r1a.website/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://xn--r1a.website/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://xn--r1a.website/bookflow Лекции, видеоуроки, доклады с IT конференций
https://xn--r1a.website/rust_lib Полезный контент по программированию на Rust
https://xn--r1a.website/golang_lib Библиотека Go (Golang) разработчика
https://xn--r1a.website/itmozg Программисты, дизайнеры, новости из мира IT
https://xn--r1a.website/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://xn--r1a.website/nodejs_lib Подборки по Node js и все что с ним связано
https://xn--r1a.website/ruby_lib Библиотека Ruby программиста
https://xn--r1a.website/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://xn--r1a.website/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://xn--r1a.website/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://xn--r1a.website/thehaking Канал о кибербезопасности
https://xn--r1a.website/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://xn--r1a.website/ux_web Статьи, книги для дизайнеров
Математика 📌
https://xn--r1a.website/Pomatematike Канал по математике
https://xn--r1a.website/phis_mat Обучающие видео, книги по Физике и Математике
https://xn--r1a.website/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://xn--r1a.website/Excel_lifehack
https://xn--r1a.website/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://xn--r1a.website/sysadmin_rabota Системный Администратор
https://xn--r1a.website/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
По всем вопросам @evgenycarter
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
По всем вопросам @evgenycarter
❤1👍1
Сегодня я хочу показать вам простой, но очень полезный приём для работы с массивами в PHP — использование функции
Очень часто бывает задача: из многомерного массива "вытащить" только один столбец данных. Например, у вас есть массив пользователей:
И нужно получить только список всех email'ов. Многие делают это через
Результат будет таким:
А ещё
И тогда получится:
Это удобный способ быстрого преобразования данных без лишнего кода.
Пользуетесь ли вы
👉 @php_lib
array_column().Очень часто бывает задача: из многомерного массива "вытащить" только один столбец данных. Например, у вас есть массив пользователей:
$users = [
['id' => 1, 'name' => 'Иван', 'email' => 'ivan@example.com'],
['id' => 2, 'name' => 'Ольга', 'email' => 'olga@example.com'],
['id' => 3, 'name' => 'Павел', 'email' => 'pavel@example.com'],
];
И нужно получить только список всех email'ов. Многие делают это через
foreach, но есть более элегантное решение:
$emails = array_column($users, 'email');
Результат будет таким:
[
'ivan@example.com',
'olga@example.com',
'pavel@example.com'
]
А ещё
array_column() позволяет указать третий параметр — ключ массива. Например, сделать email по id:
$emailsById = array_column($users, 'email', 'id');
И тогда получится:
[
1 => 'ivan@example.com',
2 => 'olga@example.com',
3 => 'pavel@example.com'
]
Это удобный способ быстрого преобразования данных без лишнего кода.
Пользуетесь ли вы
array_column() в своих проектах? Или предпочитаете что-то другое? Напишите в комментариях!👉 @php_lib
👍18🔥2🤔1