ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

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

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

Открыть в Telegram

Все самое полезное для пхпшника в одном канале. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Больше

📈 Аналитический обзор Telegram-канала Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Канал Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 10 461 подписчиков, занимая 11 698 место в категории Технологии и приложения и 60 802 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 10 461 подписчиков.

Согласно последним данным от 26 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -35, а за последние 24 часа — -5, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 16.11%. В первые 24 часа после публикации контент обычно набирает 7.39% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 1 685 просмотров. В течение первых суток публикация набирает 773 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 2.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как php, laravel, пхпшника, artisan, api.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
“Все самое полезное для пхпшника в одном канале. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b”

Благодаря высокой частоте обновлений (последние данные получены 27 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

10 461
Подписчики
-524 часа
-237 дней
-3530 дней
Архив постов
💡 Laravel tip: filled() для проверки входных данных В Laravel не всегда нужно отдельно проверять наличие поля и его значение
💡 Laravel tip: filled() для проверки входных данных В Laravel не всегда нужно отдельно проверять наличие поля и его значение. 🈶 Если нужно понять, что параметр передан и не является пустым, есть filled():

if ($request->filled('email')) {
    // ...
}
В отличие от has(), здесь проверяется не только наличие ключа, но и то, что значение не является blank. При этом 0 и false считаются заполненными. 📌 Удобный маленький метод, который убирает лишние проверки из условной логики. 🐸 Библиотека пхпшника

🔖 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')
);
📌 Для небольших файлов разница может быть незаметна. Для сотен мегабайт или гигабайт — уже совсем другая история. 🐸 Библиотека пхпшника

🐘 PHP 8.4: Property Hooks — год спустя, стоит ли ими пользоваться? Property Hooks позволяют описывать логику чтения и записи
🐘 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. 🔗 Источник 🐸 Библиотека пхпшника

⚡️ PHP 8.6: фичи заморожены PHP 8.6 перешёл в beta-фазу — теперь главное не добавлять новые крупные фичи, а искать проблемы в
⚡️ PHP 8.6: фичи заморожены PHP 8.6 перешёл в beta-фазу — теперь главное не добавлять новые крупные фичи, а искать проблемы в уже вошедших изменениях. Для разработчиков расширений и инструментов это хороший момент подключить PHP 8.6 в CI и проверить совместимость до выхода RC. После feature freeze в ветку ещё могут попадать небольшие исправления и изменения с одобрения Release Managers, но крупные RFC-фичи уже ждут следующего релиза 😬 📌 Если у вас есть PHP-библиотеки, расширения или инструменты вокруг php-src — самое время прогнать их на 8.6. 🐸 Библиотека пхпшника

⚙️ 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(). 🔗 Источник 🐸 Библиотека пхпшника

🔥 В 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. Меньше отдельных терминалов и ручного запуска сервисов при каждом старте проекта ✅ 🔗 Источник 🐸 Библиотека пхпшника

🤔 Вопрос с собеседования Планируется ли внедрение нативных дженериков в 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) {} } 👍 — знал/а 🔥 — стало понятнее 🐸 Библиотека пхпшника

📈 Почему память в 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
📌 Очереди задач: простой способ пакетной обработки Как работает очередь задач на примере создания миниатюр для видео. Цель: после загрузки видео оно должно высветиться в виде миниатюры Библиотека пхпшника

💡 Laravel-совет Директива @env_required() позволяет проверять, что переменная среды установлена и имеет значение, отличное о
💡 Laravel-совет Директива @env_required() позволяет проверять, что переменная среды установлена и имеет значение, отличное от null. Она может быть полезна для обеспечения того, чтобы приложение работало правильно только при наличии определенных переменных среды. В нашем примере директива @env_required() используется для проверки переменной среды APP_KEY. Если переменная не установлена, будет выброшено исключение. Библиотека пхпшника

😧 Почему 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() часто оказывается более удачным выбором. Библиотека пхпшника

🤔 У большинства разработчиков уже есть подписки на IDE, GitHub Copilot, Claude, ChatGPT или облачные сервисы. Логично, что о
🤔 У большинства разработчиков уже есть подписки на IDE, GitHub Copilot, Claude, ChatGPT или облачные сервисы.
Логично, что обучение тоже постепенно приходит к той же модели: не покупать отдельный курс под каждую новую тему, а иметь доступ ко всей библиотеке и выбирать, что актуально именно сейчас.
Такой формат недавно появился и в Proglib Academy. Вместо одного курса — доступ сразу ко всей библиотеке и новым материалам, которые появляются в подписке 😎 🔗 Подробнее 🏃‍♀️ Proglib Academy

Кажется, у онлайн-обучения появился формат, которого давно не хватало 👇

Совет по Laravel💡: Встроенная валидация Хотя Laravel предлагает множество правил валидации, иногда возникает необходимость в
Совет по Laravel💡: Встроенная валидация Хотя Laravel предлагает множество правил валидации, иногда возникает необходимость в использовании пользовательских правил. Обычно они записываются в пользовательском классе. Но знаете ли вы, что можно выполнять и валидацию в строке? 🚀 Библиотека пхпшника

🚀 Pipe-оператор в PHP 8.5: конец «пирамиде смерти» Одна из самых ожидаемых возможностей PHP 8.5 — pipe-оператор (|>). Он передаёт результат выражения слева первым аргументом вызываемой функции справа, позволяя строить цепочки преобразований, которые читаются сверху вниз.

// Было
$result = strlen(htmlspecialchars(trim($input)));

// Стало
$result = $input
    |> trim(...)
    |> htmlspecialchars(...)
    |> strlen(…);
Запись ... — это first-class callable. Такой код проще читать, отлаживать и постепенно расширять: каждый этап преобразования явно отделён от предыдущего. Pipe-оператор особенно полезен там, где данные проходят через несколько последовательных функций — меньше вложенности, больше читаемости. 🔗 Источник Библиотека пхпшника

💡 Хорошая шпаргалка по PHP с основными конструкциями языка: синтаксис, функции, массивы, строки, ООП, работа с файлами, обработка ошибок и многое другое. Некоторые примеры относятся к версиям PHP до 8+, но в целом материал остаётся полезным. Библиотека пхпшника

🧑‍💻 Меньше параметров в дочернем методе? Да, если используется variadic Не все знают, что начиная с PHP 8.0 дочерний метод может объявлять меньше именованных параметров, чем родительский. Это возможно, если несколько совместимых параметров заменяются одним variadic-параметром. 🅰️ Например:
class X
{
    public function foo(int $a, string $c, string ...$b): void {}
}

class Y extends X
{
    public function foo(int $a, string ...$b): void {}
}
Такой код полностью корректен. Значение, которое в родительском методе попадало в $c, в дочернем станет первым элементом $b. ➡️ Почему это работает? Потому что дочерний метод по-прежнему принимает все вызовы, допустимые для родительского:

$x->foo(1, 'A');
$x->foo(1, 'A', 'B', 'C');
А вот так уже нельзя:
class Y extends X
{
    public function foo(int $a, int ...$b): void {}
}
или

class Y extends X
{
    public function foo(int $a, string $c, string $d, string ...$b): void {}
}
В первом случае меняется тип параметров, во втором — дочерний метод начинает требовать больше обязательных аргументов. Оба варианта нарушают совместимость сигнатур. 💡 Главное правило простое: при переопределении метод должен принимать как минимум все вызовы, которые были допустимы для метода родительского класса. Библиотека пхпшника

PHP 8.6 вышла на финишную прямую 🚀 Июль оказался насыщенным для PHP 8.6: команда выпустила сразу три тестовые версии — Alpha
PHP 8.6 вышла на финишную прямую 🚀 Июль оказался насыщенным для PHP 8.6: команда выпустила сразу три тестовые версии — Alpha 1, Alpha 2 и Alpha 3. Следующий этап — Beta 1, которая запланирована на 13 августа. После перехода к бета-версии список новых возможностей, как правило, уже сформирован. Дальше основное внимание уделяется исправлению ошибок, совместимости и подготовке к стабильному релизу.
Финальный релиз PHP 8.6 ожидается 19 ноября 2026 года.
💡 Если вы поддерживаете библиотеку, фреймворк или крупное приложение, сейчас хорошее время добавить PHP 8.6 в CI отдельной задачей и прогнать тесты. Найти несовместимость за несколько месяцев до релиза намного проще, чем после выхода стабильной версии. Библиотека пхпшника

🎯 Сжатие и минификация CSS/JS через Node или PHP Команда (Node.js + Terser для JS):

npx terser src/app.js -o dist/app.min.js -c -m
💡 Минифицирует ваш JavaScript, сокращает код и уменьшает размер файлов, используя Terser. Команда (Node.js + CleanCSS для CSS):

npx clean-css-cli -o dist/style.min.css src/style.css
💡 Минифицирует CSS, удаляя пробелы, комментарии и упрощая записи, что ускоряет загрузку страницы. ❓ Зачем это нужно?
🔹 Ускорение загрузки страниц: Меньший размер JS и CSS сокращает время передачи данных. 🔹 Оптимизация производительности: Минифицированный код обрабатывается браузером быстрее. 🔹 Чистый продакшн: Убираются ненужные пробелы и комментарии, что делает код компактным.
⚙️ Дополнительные опции Terser: -c или --compress: Сжимает код, удаляя лишние конструкции. -m или --mangle: Переименовывает переменные и функции, уменьшая размер. --source-map: Генерирует source map для удобного дебага минифицированного кода. Пример с source map: npx terser src/app.js -o dist/app.min.js -c -m --source-map ⚙️ Дополнительные опции CleanCSS: --compatibility — задаёт совместимость с браузерами. --level — уровень оптимизации (1 или 2). Пример:

npx clean-css-cli -o dist/style.min.css src/style.css --level 2
Библиотека пхпшника