uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

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

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 10 461 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 11 698-o'rinni va Rossiya mintaqasida 60 802-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 10 461 obunachiga ega bo‘ldi.

26 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -35 ga, so‘nggi 24 soatda esa -5 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 16.11% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 7.39% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 685 marta ko‘riladi; birinchi sutkada odatda 773 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 2 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent php, laravel, пхпшника, artisan, api kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Все самое полезное для пхпшника в одном канале. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b”

Yuqori yangilanish chastotasi (oxirgi ma’lumot 27 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

10 461
Obunachilar
-524 soatlar
-237 kun
-3530 kun
Postlar arxiv
💡 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 отдельной задачей и прогнать тесты. Найти несовместимость за несколько месяцев до релиза намного проще, чем после выхода стабильной версии. Библиотека пхпшника