Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.1K subscribers
1.5K photos
24 videos
26 files
4.22K links
Все самое полезное для пхпшника в одном канале.

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

Учиться у нас: https://proglib.io/w/bca892d6

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🔥 Когда понимаешь SOLID — жизнь становится проще

В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»

📘 На интенсиве ты:

— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».

👨‍💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.

Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.

📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.

Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.

👉 Переходи к курсам со скидкой 40%
😁2
🚀 composer/xdebug-handler — отключение Xdebug для повышения производительности

Библиотека composer/xdebug-handler предназначена для временного отключения расширения Xdebug в процессе выполнения PHP-скриптов, что позволяет значительно ускорить операции, такие как установка зависимостей с помощью Composer.

Зачем это нужно?
Xdebug предоставляет мощные возможности для отладки и профилирования PHP-кода, однако его включение может существенно замедлить выполнение скриптов. Например, Composer может работать в 3–4 раза медленнее при активном Xdebug, даже если не используются функции профилирования.

composer/xdebug-handler автоматически перезапускает процесс PHP без загрузки Xdebug, сохраняя при этом все необходимые настройки и переменные окружения. После завершения работы Xdebug восстанавливается.

Когда стоит использовать?
В CLI-скриптах, например, при запуске Composer.
В CI/CD пайплайнах, где важна скорость выполнения.
В разработке, когда необходимо временно ускорить выполнение скриптов без отключения Xdebug.

Установка

composer require composer/xdebug-handler

📦 Ссылка на репозиторий GitHub

Библиотека пхпшника

#инструменты
How to: обнаружить и добавить отсутствующий RefreshDatabase в тестах Laravel

Статья объясняет проблему при тестировании Laravel-приложений: если в тестах не используется трейт RefreshDatabase, данные, созданные в БД (через фабрики, сидеры или HTTP-запросы), могут сохраняться между тестами и вызывать случайные ошибки при последующих запусках.

Автор показывает, как это предотвратить:
🔸 можно добавить RefreshDatabase глобально для всех feature-тестов через tests/Pest.php;
🔸 можно искать тесты без этого трейта с помощью grep, например:

grep -rL 'RefreshDatabase' tests/Feature | xargs grep -l '::factory('

— эта команда находит тесты, где нет трейта, но есть использование фабрик.

🔸можно расширить поиск и даже встроить такую проверку в GitHub Actions, чтобы CI падал, если в PR есть тесты без трейта, но с операциями, изменяющими БД.

В конце совет:
🔹 всегда использовать RefreshDatabase, так как он быстрее и безопаснее других способов очистки БД;
🔹 предпочитать фабрики и сидеры ручному созданию моделей;
🔹 проверять, что HTTP-тесты, создающие записи, также используют этот трейт.

🔗 Читать статью

Библиотека пхпшника
😁2
📚 Классика, которая не стареет: курс по структурам данных

Одни из легендарных лекций по структурам данных от MIT, где каждая лекция — как путешествие в глубину компьютерной науки.

Темы, которые остаются актуальными и сейчас:
➡️ Time travel — персистентные структуры данных: как «помнить прошлое», но не менять его.
➡️ Geometry — работа с многомерными данными (карты, таблицы, базы).
➡️ Dynamic optimality — идеальное дерево поиска: существует ли оно вообще?
➡️ Memory hierarchy — оптимизация работы с кэшем, даже не зная его размера.
➡️ Hashing — самая используемая структура данных в мире, и до сих пор поле активных исследований.
➡️ Integers — когда логарифм слишком медленно, а константа — возможна.
➡️ Dynamic graphs — как быстро пересчитывать граф при изменениях связей.
➡️ Strings — поиск подстрок в гигантских текстах (Google, ДНК и всё между).
➡️ Succinct structures — структуры, которые занимают почти столько же места, сколько сами данные.

🎓 Ссылка на лекции от MIT

Хочешь прокачаться в алгоритмах с практикой и поддержкой?
Алгоритмы и структуры данных
⚡️ Сейчас действует акция –40% на курс и ещё несколько программ.

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🎲 Простой скрипт на PHP: что будет — true или false?
$a = 12345678901234567890;
$b = $a + 1;
var_dump($a === $b);


🔍 На первый взгляд: $b = $a + 1 → два разных числа, значит === должен вернуть false.
Но PHP выведет true — значения «слипаются».

🧠 Почему так?

В PHP есть два числовых типа: int и float (double, по стандарту IEEE-754).

Если в коде стоит очень большое целое число, которое не помещается в диапазон int (на 64-битной системе около ±9.22e18), PHP автоматически парсит его как float.

В нашем примере оба литерала слишком большие → оба превращаются в float ещё на этапе разбора кода.

float хранит числа с ~15–17 значимыми цифрами. На значениях порядка 10¹⁹ шаг между двумя смежными представленными числами (ULP) может быть около 2048!

Разница в 1 между $a и $a + 1 слишком мала, чтобы быть «видимой» в представлении float. В итоге оба числа записываются как одно и то же значение.

При строгом сравнении === PHP сравнивает тип и внутреннее двоичное представление — и они совпадают → true.

⚠️ Где это может подвести в жизни

ID из БД или API
Длинные идентификаторы (BIGINT) попадают в PHP как числа → уязвимость к потере точности.

json_decode
Без JSON_BIGINT_AS_STRING большие числа могут превратиться в float.

Ключи массивов
Если использовать очень большое число как ключ, он может оказаться float, потом приведён к int, и несколько ключей «слипнутся» в один.

Сравнения и безопасность
Два разных числа могут быть признаны равными, что приводит к неожиданному поведению.

Как защититься

Передавайте идентификаторы как строки, а не числа.

При декодировании JSON используйте:
json_decode($json, false, 512, JSON_BIGINT_AS_STRING);


Для операций с большими числами — bcmath, gmp или аналоги:
bccomp("12345678901234567890", "12345678901234567899");  // -1  
bcadd("99999999999999999999", "1"); // "100000000000000000000"


Валидируйте входные данные: не приводите строку к int, если она вне допустимого диапазона.

На фронтенде (JavaScript) тоже осторожно: безопасная зона — до ±(2^53 − 1). Всё, что больше — отправляйте строкой.

💡 PHP «слипает» очень большие целые числа в float, и на больших значениях шаг между числами становится большим. Поэтому два разных литерала могут превратиться в одно и то же значение.

🔗 Хабр

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍261
🛠 PHP-лайфхак: Автоформатирование кода в IDE

Если хочешь, чтобы код всегда был аккуратным и соответствовал стандартам — не делай это вручную, настрой автоформатирование в IDE!

🔍 Как это работает:

Используй PSR-12 стандарт для форматирования кода.

Подключи php-cs-fixer к проекту:

composer require --dev friendsofphp/php-cs-fixer


Настрой IDE (PhpStorm, VS Code) так, чтобы код автоматически форматировался при сохранении файла.

./vendor/bin/php-cs-fixer fix


⚡️ Почему это круто:

Все файлы соответствуют стандарту без ручной правки

Экономия времени на ревью и исправления стиля

Чистый и читаемый код для всей команды

💡 Совет: можно настроить pre-commit hook через Composer, чтобы перед каждым коммитом код автоматически форматировался:
"scripts": {
"pre-commit": "php-cs-fixer fix"
}


Теперь каждая сохранённая строка кода и каждый коммит будут соответствовать стандартам без лишней работы.

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🥱3👍2👏1😁1
💥 Октябрь — месяц апгрейда!

До конца этого месяца действует скидка 40% на все курсы Proglib Academy (кроме AI-агентов, ML для старта и математики).

Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».

👨‍💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.

👨‍🏫 Преподаватели — инженеры из Яндекса и ВШЭ.

🎓 Сертификат по итогам обучения — в портфолио.

47 видеоуроков и 150 практических задач;
поддержка преподавателей и чат;
доступ к материалам на 12 месяцев.

Полная программа курса тут 👈

👉 Остальные курсы
🐘 PHP для начинающих: жизненный цикл приложений на Laravel

Статья объясняет жизненный цикл Laravel (Laravel Lifecycle) — то есть путь, который проходит HTTP-запрос от пользователя до формирования ответа в браузере.
Она предназначена для начинающих PHP-разработчиков и часто встречается на собеседованиях.

Ключевые идеи:
Laravel Lifecycle — это последовательность шагов, через которые проходит запрос внутри фреймворка.

Основные этапы:
public/index.php — точка входа, с которой всё начинается.
bootstrap/app.php — создаётся экземпляр приложения и подгружается ядро (Kernel).
Service Providers — инициализируют основные функции: БД, кэш, маршрутизацию, аутентификацию.
Middleware — фильтры, проверяющие запросы (например, авторизацию).
Routing и Controller — определяют, какой метод контроллера должен обработать запрос.
Models и Database — при необходимости извлекаются данные из БД.
View и Response — данные преобразуются в HTML-ответ и отправляются пользователю.

Авторы объясняют это на примере ресторана:
вход — index.php,
кухня — app.php,
повар — контроллер,
блюдо — ответ пользователю.

Понимание жизненного цикла Laravel помогает лучше дебажить, писать оптимизированный код и осознать, как фреймворк превращает обычный HTTP-запрос в готовую HTML-страницу.

👉 Читать статью

Библиотека пхпшника

#php_азбука
3👍2
✍️ Объявляем перепись «боевых машин»!

Говорят, айтишника можно опознать по двум признакам: тёмная тема в IDE и 100+ вкладок в браузере, которые съели всю ОЗУ. Давайте проверим, на чём всё это крутится.

Расскажите в комментариях, какой у вас рабочий ноутбук? Что за модель, какой чип и сколько гигабайт памяти спасают вас от коллапса системы? 💻

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4
Laravel-совет

Директива @env_required() позволяет проверять, что переменная среды установлена и имеет значение, отличное от null. Она может быть полезна для обеспечения того, чтобы приложение работало правильно только при наличии определенных переменных среды.

В нашем примере директива @env_required() используется для проверки переменной среды APP_KEY. Если переменная не установлена, будет выброшено исключение.

Библиотека пхпшника

#vardump
👍63👾1
20 лет Symfony!

История фреймворка представленная в классном стиле 👉 Клик

Библиотека пхпшника
👍19🥰3
📚 Реляционные базы данных в примерах (2025)

В книге автор собрал все ключевые идеи реляционных СУБД — от понятия данных до логики работы транзакций. Тебя ждет фундаментальная теория и наглядная практика проектирования БД:

▪️таблицы, ключи, связи;
▪️нормальные формы, представления;
▪️триггеры, хранимые процедуры и многое другое в примерах.

🔥 Подойдёт тем, кто:

▪️когда-то изучал базы, но уже все забыл;
▪️имеет узкий практический опыт и хочет расширить знания;
▪️хочет в предельно сжатые сроки начать использовать реляционные БД в работе.

🔗 Скачать
🤞 Поддержать канал бустом

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
6
💻 Подборка новостей по PHP за неделю:​

🔹 PHP 8.5.0 RC2 — второй релиз-кандидат доступен для тестирования. Выход финальной версии всё ближе: разработчиков призывают проверять совместимость и сообщать о багах.

🔹 Closures в константных выражениях (PHP 8.5) — теперь можно использовать замыкания прямо в константах и как значения по умолчанию (например, в атрибутах). Это существенно расширяет выразительность языка.

🔹 Новый URI-экстеншен в PHP 8.5 — в стандартную библиотеку добавлен полноценный парсер URI, соответствующий RFC 3986 и WHATWG URL. Больше не нужно сторонних пакетов для корректного парсинга URL.

🔹 Laravel 12.34 — появился failover queue driver для отказоустойчивости очередей, улучшен полнотекстовый поиск в Scout и добавлена возможность откладывать выполнение HTTP batch-запросов.

🔹 Symfony 13–19 октября — продолжается полировка релизов 7.4 и 8.0, запущен сайт к 20-летию Symfony и опубликована первая статья серии New in Symfony 7.4.

Библиотека пхпшника

#свежак
😍31👏1
💡 Совет по Laravel: Результат команды

Знаете ли вы, что Laravel позволяет определять колбеки, которые будут выполняться в зависимости от результата запланированной задачи? Это помогает регистрировать сбои или выполнять связанные действия в случае успеха 🚀

Библиотека пхпшника

#vardump
🧠 Готовишься к собесам, а ноутбук еле тянет IDE?

Самое время прокачать скиллы и апгрейднуть железо!

Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻

Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре!

📚 Среди курсов:

▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG.

▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior.

▫️ Python, математика для DS, основы IT и другие направления.

👉 Принять участие
😁4👾1
🧩 Enums в Laravel: конец магическим строкам

Если вы когда-либо писали status = 'pending' и потом искали, где же опечатались или где вдруг “Pending” и “pending” трактуются по-разному — добро пожаловать в мир нативных Enums в PHP 8.1.
С выходом Laravel 12 они перестали быть просто “новинкой языка” — это теперь must-have инструмент для чистого, безопасного и предсказуемого кода.

💡 Зачем они нужны

Enums заменяют беспорядок из строк, флагов и констант.
— гарантируют типобезопасность: вы даёте переменной не просто строку, а определённое значение из “набора”.
— код становится само-документируемым: “это состояние” видно из названия enum-класса, а не приходится гуглить что означают разные статусы.
— легче поддержка: менее вероятно, что в коде появится “typo” или неизвестное состояние.
— интеграция с Laravel становится проще: например, enum-кастинг колонок модели, валидация enum-значения — меньше “шаблонного” кода.

🛠 Как мыслить без кода
Представьте: у вас есть список чётких, фиксированных значений — например, “ожидает”, “в работе”, “завершено”, “отменено”.
Раньше: множество строк, массивов, проверки типа if status == 'completed'.
С Enums: “статус задачи” — это не просто строка, это экземпляр типа, который не может быть чем-то другим.
База данных остаётся привычной, интерфейсы — знакомыми, но логика приложения читается лучше.

📊 Что принесёт использование Enums
— меньше ошибок на проде (например: “неверное состояние”),
— лучше автодополнение и подсказки в IDE,
— меньше “магических строк” в коде,
— единое место для описания значений и поведения (если enum-тип расширить методами типа “label” или “сортировка”).
Разработчики отмечают, что применение Enums делает код более выразительным и легче рефакторить.
В контексте Laravel 12 это уже не эксперимент — это один из рекомендуемых подходов.

🎯 Когда начинать?
Если вы ещё не используете Enums, то:
— при новом проекте на Laravel 12/13 — смело включайте их “с самого начала”.
— при рефакторинге старого проекта — начните с ключевых участков: статусы, роли, состояние процесса.
— если используете строковые флаги или массивы “констант” — обратите внимание: Enums может стать шагом к более стабильной архитектуре.

📣 Общее настроение
Enums — это не просто синтаксический сахар. Это шаг к более выразительному, поддерживаемому и устойчивому коду.
Если вы программист-artisan, стремящийся не просто “сделать” приложение, а выстроить его красиво и последовательно — Enums это инструмент, который стоит в арсенале.

🔗 Medium

Библиотека пхпшника
👍61
Архитектура — Dependency Injection & SOLID

Какой принцип SOLID здесь соблюдён?