Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Показати більше📈 Аналітичний огляд Telegram-каналу Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Канал Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 10 521 підписників, посідаючи 11 391 місце в категорії Технології та додатки та 60 853 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 10 521 підписників.
За останніми даними від 25 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -62, а за останні 24 години на 1, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 19.18%. Протягом перших 24 годин після публікації контент зазвичай збирає 9.49% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 2 019 переглядів. Протягом першої доби публікація в середньому набирає 999 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 16.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як php, laravel, пхпшника, artisan, api.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Все самое полезное для пхпшника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: clc.to/M561SQ
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b”
Завдяки високій частоті оновлень (останні дані отримано 26 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
Триває завантаження даних...
| Дата | Залучення підписників | Згадування | Канали | |
| 26 серпня | +3 | |||
| 25 серпня | +2 | |||
| 24 серпня | +3 | |||
| 23 серпня | 0 | |||
| 22 серпня | 0 | |||
| 21 серпня | 0 | |||
| 20 серпня | 0 | |||
| 19 серпня | +1 | |||
| 18 серпня | +1 | |||
| 17 серпня | +1 | |||
| 16 серпня | 0 | |||
| 15 серпня | +1 | |||
| 14 серпня | +1 | |||
| 13 серпня | +1 | |||
| 12 серпня | +3 | |||
| 11 серпня | +1 | |||
| 10 серпня | +1 | |||
| 09 серпня | 0 | |||
| 08 серпня | +1 | |||
| 07 серпня | +1 | |||
| 06 серпня | +1 | |||
| 05 серпня | +5 | |||
| 04 серпня | +1 | |||
| 03 серпня | +1 | |||
| 02 серпня | 0 | |||
| 01 серпня | 0 |
| 2 | 🤩 Ленивая инициализация без proxy-хаков
В PHP 8.4 ленивые объекты появились прямо в движке. Это особенно полезно для ORM, DI-контейнеров и объектов, создание которых может быть дорогим.
Создать lazy ghost можно через Reflection:
$reflector = new ReflectionClass(Order::class);
$order = $reflector->newLazyGhost(
function (Order $order): void {
$order->__construct(loadFromDb());
}
);
На этом этапе конструктор ещё не выполнялся. Когда объекту понадобится состояние, PHP вызовет initializer и объект инициализируется.
Есть и второй вариант — newLazyProxy(): он при инициализации создаёт реальный объект и проксирует дальнейшие обращения к нему.
📌 Тяжёлая работа выполняется только когда объект действительно понадобится. Это может быть полезно для ленивой загрузки данных или зависимостей.
И важный момент: lazy objects не означают автоматическое ускорение всего приложения. Если объект в итоге всегда используется, выигрыш от откладывания инициализации может быть минимальным.
Библиотека пхпшника | 1 099 |
| 3 | 🤩 Вы кешируете запросы в Redis, но забыли про OPcache?
PHP компилирует каждый .php-файл в байткод при каждом запросе — если не настроен OPcache. Это означает лишние CPU-циклы на парсинг даже самого тривиального хелпера.
Минимальный конфиг для прода:
; включаем
opcache.enable=1
opcache.enable_cli=1
; кол-во кешируемых файлов (>= числа файлов в проекте)
opcache.max_accelerated_files=20000
; размер разделяемой памяти (MB)
opcache.memory_consumption=256
; кешируем строки — экономим RAM
opcache.interned_strings_buffer=16
; в продакшне: 0 (не проверять изменения файлов)
opcache.validate_timestamps=0
📍 Почему validate\_timestamps=0 в проде?
При каждом запросе PHP проверяет mtime файла на диске. На высоких RPS — это сотни лишних stat()-syscall'ов в секунду. Инвалидируйте кеш вручную через opcache_reset() или перезапуск PHP-FPM при деплое.
💡 Хотите проверить, что лежит в кеше и сколько памяти занято? Используйте opcache_get_status() — или поставьте opcache-gui для визуального мониторинга.
Библиотека пхпшника | 1 195 |
| 4 | ❓ С чего начать изучение PHP и куда двигаться дальше? Собрали путь от базового синтаксиса до уровня, где в дело уже входят Laravel/Symfony, тестирование, PHPStan, профилирование, кеширование и PHP-FPM.
Сохраняйте roadmap, чтобы не потеряться в огромном экосистемном дереве PHP 🔖
🐸 Библиотека пхпшника | 1 355 |
| 5 | 🤔 PHP tip: когда ?? лучше, чем isset()
Если нужно взять значение и подставить запасное, необязательно сначала проверять isset():
$name = isset($request['name'])
? $request['name']
: 'Guest’;
🔵 В PHP есть оператор null coalescing:
$name = $request['name'] ?? 'Guest’;
Он вернёт 'Guest', если значение отсутствует или равно null.
🔵 При этом false, 0 и '' считаются значениями и не заменяются:
$value = 0 ?? 100; // 0
📌 Простое правило:
?? → «возьми значение, а если его нет — используй это».
isset() → «проверь, существует ли значение и не null ли оно».
🐸 Библиотека пхпшника | 1 484 |
| 6 | Итоги недели 🙂
🐸 Библиотека пхпшника | 1 616 |
| 7 | 💡 Laravel tip: filled() для проверки входных данных
В Laravel не всегда нужно отдельно проверять наличие поля и его значение.
🈶 Если нужно понять, что параметр передан и не является пустым, есть filled():
if ($request->filled('email')) {
// ...
}
В отличие от has(), здесь проверяется не только наличие ключа, но и то, что значение не является blank. При этом 0 и false считаются заполненными.
📌 Удобный маленький метод, который убирает лишние проверки из условной логики.
🐸 Библиотека пхпшника | 1 736 |
| 8 | 🔖 Laravel tip: не загружайте большие файлы целиком в память
Если файл нужно переложить из одного хранилища в другое, необязательно делать get() и получать весь файл как строку.
➡️ Laravel умеет работать с потоками:
$stream = Storage::disk('s3')
->getDriver()
->readStream($sourceFile);
Storage::disk('sftp')->put($targetFile, $stream);
Поток читается и передаётся дальше без необходимости загружать весь файл в память приложения.
➡️ То же самое работает при загрузке локального файла:
Storage::disk('s3')->put(
$targetFile,
fopen($sourceFile, 'r')
);
📌 Для небольших файлов разница может быть незаметна. Для сотен мегабайт или гигабайт — уже совсем другая история.
🐸 Библиотека пхпшника | 1 777 |
| 9 | 🐘 PHP 8.4: Property Hooks — год спустя, стоит ли ими пользоваться?
Property Hooks позволяют описывать логику чтения и записи прямо у свойства — без отдельных getX() и setX():
class User
{
public string $email {
set => strtolower(trim($value));
}
public string $displayName {
get => ucfirst($this->firstName);
}
}
Особенно полезны для:
→ нормализации данных
→ валидации
→ вычисляемых свойств
→ DTO и Value Objects
А с asymmetric visibility можно оставить свойство публичным для чтения, но запретить изменение извне:
public private(set) string $email;
📌 Но мигрировать проект только ради Property Hooks не стоит. Если PHP 8.4+ уже используется, hooks хорошо подходят для точечного рефакторинга там, где накопились однотипные getter/setter.
⚠️ Property Hooks несовместимы с readonly.
🔗 Источник
🐸 Библиотека пхпшника | 1 755 |
| 10 | ⚡️ PHP 8.6: фичи заморожены
PHP 8.6 перешёл в beta-фазу — теперь главное не добавлять новые крупные фичи, а искать проблемы в уже вошедших изменениях.
Для разработчиков расширений и инструментов это хороший момент подключить PHP 8.6 в CI и проверить совместимость до выхода RC.
После feature freeze в ветку ещё могут попадать небольшие исправления и изменения с одобрения Release Managers, но крупные RFC-фичи уже ждут следующего релиза 😬
📌 Если у вас есть PHP-библиотеки, расширения или инструменты вокруг php-src — самое время прогнать их на 8.6.
🐸 Библиотека пхпшника | 1 894 |
| 11 | ⚙️ clone() + readonly в PHP 8.5
Классика: есть immutable Value Object, и нужно получить его копию с одним изменённым значением. Раньше для этого часто писали отдельные with...()-методы:
final readonly class Money
{
public function __construct(
public int $amount,
public string $currency,
) {}
public function withAmount(int $amount): self
{
return new self($amount, $this->currency);
}
}
➡️ В PHP 8.5 появился новый вариант clone():
$price = new Money(1000, 'USD');
$discounted = clone($price, [
'amount' => 850,
]);
В результате $price остаётся прежним, а $discounted получает новое значение amount. Главная фишка: так можно переопределять даже readonly-свойства во время клонирования.
Удобно для Value Object, DTO и immutable-моделей, где раньше ради каждого изменения приходилось писать отдельный withSomething().
🔗 Источник
🐸 Библиотека пхпшника | 2 369 |
| 12 | 🔥 В Laravel 13 прокачали локальную разработку
Теперь для запуска основного dev-окружения достаточно:
php artisan dev
➡️ Команда собирает в одном терминале сразу несколько процессов:
php artisan dev
│
├── server → php artisan serve
├── queue → queue worker
├── logs → Laravel Pail
└── vite → frontend dev server
А управлять всем этим можно прямо из терминального интерфейса: переключаться между общим и раздельным выводом процессов, перезапускать их, очищать логи и искать по выводу.
Свои процессы тоже можно зарегистрировать — например, Reverb или listener для Stripe. Меньше отдельных терминалов и ручного запуска сервисов при каждом старте проекта ✅
🔗 Источник
🐸 Библиотека пхпшника | 2 332 |
| 13 | 🤔 Вопрос с собеседования
Планируется ли внедрение нативных дженериков в PHP в ближайшем будущем?
Например:
class Box<T>
{
public function __construct(public T $value) {}
}
👇 Правильный ответ (нажми, чтобы прочитать):
Пока — нет подтверждённого релиза.
В 2026 году появился новый RFC Bound-Erased Generic Types, который предлагал добавить дженерики для классов, интерфейсов, трейтов, функций и методов. В июне предложение вынесли на голосование, но RFC был отклонён.
🈂️ Поэтому на август 2026 года нативных дженериков в PHP нет и конкретной версии, в которой они появятся, тоже нет. На практике generics по-прежнему реализуют через PHPDoc и статические анализаторы вроде PHPStan и Psalm:
/**
* @template T
*/
class Box
{
/** @param T $value */
public function __construct(public mixed $value) {}
}
👍 — знал/а
🔥 — стало понятнее
🐸 Библиотека пхпшника | 1 854 |
| 14 | 📈 Почему память в PHP-воркерах только растёт — и это нормально
Если вы переходите с PHP-FPM на RoadRunner, Laravel Queue или Symfony Messenger — вы увидите один и тот же эффект:
Память растёт ступеньками и никогда не падает.
40 → 200 → 350 МБ… и так до перезапуска.
Unset, GC, collect_cycles() — не помогают.
Это не утечка. Это архитектура PHP.
🔵 Почему так происходит
PHP использует Zend Memory Manager: он выделяет память крупными чанками (2–4 МБ) и не отдаёт их ОС назад, даже если внутри всё освобождено.
Каждый пик — новый baseline. Обработали 100k записей → память выросла → процесс будет держать этот объём до конца жизни.
🔥 Что вызывает «разбухание»
ORM ->all() или ->get() на десятки тысяч записей
большой файл в file_get_contents()
накопление массивов
сложные eager-loading графы ORM
✅ Как проектировать правильно
— Стриминг вместо коллекций:
User::lazy()->each(fn($u) => processUser($u));
или:
Record::chunk(100, function ($rows) {
foreach ($rows as $r) processRecord($r);
});
✔️ Doctrine:
foreach ($q->toIterable() as $u) {
process($u);
$em->detach($u);
}
— Изоляция тяжёлых операций в функцию — память освобождается при выходе из scope.
— Ротация воркеров — обязательна:
Laravel:
php artisan queue:work --max-jobs=1000
RoadRunner:
pool:
max_jobs: 1000
Messenger:
messenger:consume --limit=1000
🐸 Библиотека пхпшника | 1 872 |
| 15 | 📌 Очереди задач: простой способ пакетной обработки
Как работает очередь задач на примере создания миниатюр для видео.
Цель: после загрузки видео оно должно высветиться в виде миниатюры
Библиотека пхпшника | 2 008 |
| 16 | 💡 Laravel-совет
Директива @env_required() позволяет проверять, что переменная среды установлена и имеет значение, отличное от null. Она может быть полезна для обеспечения того, чтобы приложение работало правильно только при наличии определенных переменных среды.
В нашем примере директива @env_required() используется для проверки переменной среды APP_KEY. Если переменная не установлена, будет выброшено исключение.
Библиотека пхпшника | 2 109 |
| 17 | 😧 Почему strtr() иногда лучше, чем str_replace()
Если нужно заменить сразу несколько строк, многие используют str_replace(). Но есть нюанс: замены выполняются последовательно, поэтому результат одной замены может попасть под следующую.
🔴 Например:
$map = [
'foo' => 'bar',
'foobar' => 'foo',
];
$input = 'foobar and foo';
echo str_replace(
array_keys($map),
array_values($map),
$input
);
// bar bar and bar
Сначала "foo" превращается в "bar", поэтому "foobar" становится "barbar" и до второй замены уже не доходит.
🔴 strtr() работает иначе:
echo strtr($input, $map);
// foo and bar
Функция выполняет один проход по строке и всегда выбирает самое длинное совпадение. Уже заменённые части строки повторно не обрабатываются.
Благодаря этому:
— не нужно сортировать шаблоны по длине;
— замены не влияют друг на друга;
— результат получается более предсказуемым.
Если требуется заменить несколько независимых подстрок по словарю вида "что" => "на что", strtr() часто оказывается более удачным выбором.
Библиотека пхпшника | 1 971 |
| 18 | 😂😂
Библиотека пхпшника
#dev_meme | 1 935 |
| 19 | 🤔 У большинства разработчиков уже есть подписки на IDE, GitHub Copilot, Claude, ChatGPT или облачные сервисы.
Логично, что обучение тоже постепенно приходит к той же модели: не покупать отдельный курс под каждую новую тему, а иметь доступ ко всей библиотеке и выбирать, что актуально именно сейчас.
Такой формат недавно появился и в Proglib Academy. Вместо одного курса — доступ сразу ко всей библиотеке и новым материалам, которые появляются в подписке 😎
🔗 Подробнее
🏃♀️ Proglib Academy | 1 587 |
| 20 | Кажется, у онлайн-обучения появился формат, которого давно не хватало 👇 | 1 907 |
