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

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

Статистика

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

Последний пост
14 авг.
Последнее чтение
19:53
Постов за неделю
6
Всего постов
153
Тип
открытый
Язык
русский
Категория
Технологии (по похожим)
В каталоге с
12 авг.
Подписчики
10 546
−5 за 4 дн.
Сутки
+1
+0,01%
Неделя
 
Месяц
 
Просмотров на пост
1 697
40 постов
Вовлечённость
16,1%
к подписчикам
Постов в день
0,9
всего 153
Упоминаний
2
каналов
Охват размещения
оценка
1/24сутки в ленте
1 220
1/48двое суток
1 398
1/72трое суток
1 507

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 14 авг.1 0391712

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

  • 13 авг.1 3632518

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

  • 12 авг.1 356314

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

  • 11 авг.1 3901730

    📈 Почему память в 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 Библиотека пхпшника

  • 10 авг.1 45611

    видео или голосовое, без подписи

  • +1
    10 авг.1 449711

    📌 Очереди задач: простой способ пакетной обработки Как работает очередь задач на примере создания миниатюр для видео. Цель: после загрузки видео оно должно высветиться в виде миниатюры Библиотека пхпшника

  • 9 авг.1 663157

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

  • 8 авг.1 6521013

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

  • 7 авг.1 6062136

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

  • 7 авг.1 2413из proglib_academy

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

  • 7 авг.1 537

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

  • 6 авг.1 738158

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

  • 5 авг.2 0972116

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

  • 4 авг.2 188954

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

  • 3 авг.2 19597

    🧑‍💻 Меньше параметров в дочернем методе? Да, если используется 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 {} } В первом случае меняется тип параметров, во втором — дочерний метод начинает требовать больше обязательных аргументов. Оба варианта нарушают совместимость сигнатур. 💡 Главное правило простое: при переопределении метод должен принимать как минимум все вызовы, которые были допустимы для метода родительского класса. Библиотека пхпшника

  • 2 авг.2 0221113

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

  • 1 авг.1 735919

    🎯 Сжатие и минификация 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 Библиотека пхпшника

  • 31 июл.2 0452914

    #dev_meme

  • 30 июл.2 2001423

    👀 Хуки свойств в PHP В PHP 8.4 появилась долгожданная возможность — хуки свойств. Это встроенная логика чтения и записи значения прямо в объявлении свойства. Без отдельных методов, без шаблонных getSomething() и setSomething(). Код становится компактнее, выразительнее и проще для сопровождения. 🔹 В чём была проблема До этого было всего два варианта: — классический подход с приватными полями и методами доступа; — promoted-properties из конструктора — удобно, но без логики. У обоих подходов есть ряд минусов: — негде аккуратно разместить валидацию; — сложно добавить логирование изменений; — неудобно реализовать ленивые вычисления; — класс быстро разрастался вспомогательными методами. 🔹 Что изменилось с хуками Теперь PHP позволяет перехватывать: → момент чтения свойства; → момент записи значения. При этом снаружи используется привычный доступ к свойству, внутри — чётко определённое место для логики и в одном классе можно сочетать обычные свойства и свойства с хуками. 🔹 Виртуальные свойства PHP 8.4 позволяет создавать свойства без собственного хранилища. Такие свойства: → не занимают память; → вычисляются при каждом обращении; → выступают как интерфейс к другим данным объекта. Полезно для: объединённых представлений данных, вычисляемых значений, и упрощения публичного API модели. ⚠️ Важные ограничения — хуки несовместимы с readonly-свойствами; — изменение по ссылке может обойти логику записи; — не все внутренние функции PHP вызывают хуки одинаково. 🔗 Хабр Библиотека пхпшника

  • 29 июл.1 96565

    #dev_meme