Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
10.5K subscribers
1.76K photos
31 videos
29 files
4.57K links
Все самое полезное для пхпшника в одном канале.

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

Учиться у нас: clc.to/M561SQ

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🔎 Как быстро увидеть, что вы изменили в php.ini

В PHP 8.5 появилась малоизвестная CLI-опция:


php --ini=diff


Она показывает только настройки, которые отличаются от стандартной конфигурации PHP.

Полезно, когда нужно:

— разобраться, чем production отличается от дефолта;
— проверить Docker-образ;
— перенести конфигурацию на новый сервер.

Особенно удобно вместо ручного сравнения огромного php.ini.

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥31
🤩 PHP и атрибуты: #[Override]

В PHP 8.3 появился атрибут #[Override], который помогает ловить ошибки при переопределении методов.

Если метода find() нет в родительском классе или интерфейсе, PHP сообщит об ошибке.


Полезно при рефакторинге: переименовал метод в базовом классе — наследники не останутся с «тихо сломанным» override.

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🧠 spatie/laravel-data: типизированные DTO для Laravel

Вместо массивов вроде:


$email = $data['email'];
$quantity = $data['quantity’];


🔘 можно описать структуру данных отдельным классом:


class OrderData extends Data
{
public function __construct(
public string $email,
public int $quantity,
public ?string $promoCode = null,
) {}
}


🔘 И создать объект из входных данных:


$order = OrderData::from($request->all());

echo $order->email;


Дальше работают обычные типы PHP и автодополнение IDE, а laravel-data добавляет маппинг, валидацию, вложенные DTO и преобразование обратно в массив или JSON.

Удобный вариант, когда DTO в Laravel становится больше, чем просто набором полей.

🔗 ⁠Документация

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😁4
💥 Именованные аргументы вместо загадочных true/false

Такой вызов приходится расшифровывать:


createUser('Аня', true, false, true);


🔴 Что означает каждый bool?

С PHP 8.0 можно передать аргументы по имени:


createUser(
name: 'Аня',
isAdmin: true,
sendEmail: false,
verified: true,
);


Сигнатуру метода менять не нужно — именованные аргументы работают прямо с существующими параметрами.

🔴 А ещё можно пропускать необязательные параметры и передавать только нужные:


createUser(
name: 'Аня',
verified: true,
);


Никаких зависимостей — просто вызов, который сам объясняет, что именно происходит.

🔗 PHP Docs — Named Arguments

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍13
📍 Laravel Telescope 5.24: отладка прямо из Artisan

В новой версии Telescope искать и разбирать записи можно без открытия dashboard.

➡️ Появились две команды:


php artisan telescope:list request
php artisan telescope:show latest:request


➡️ list показывает последние записи Telescope. Можно фильтровать их по типу, тегу, batch ID и другим параметрам:


php artisan telescope:list exception --limit=5
php artisan telescope:list request --tag=Auth:42
php artisan telescope:list --batch=79a09461


➡️ show раскрывает конкретную запись и связанные с ней события: queries, cache operations, logs, exceptions и т. д.


php artisan telescope:show latest:exception
Для скриптов и coding agents есть --json:
php artisan telescope:show latest:exception --json


А --full отключает сокращение длинных SQL, сообщений и payload’ов.

💡 Особенно удобно для отладки в терминале: нашёл проблемный request → посмотрел его batch → увидел медленный query или exception, не переключаясь между CLI и браузером.

В 5.24 также исправили stale-запросы dashboard: при навигации старый polling-запрос больше не должен перезаписывать уже открытый экран.

🔗 Источник

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2👍1
🌞 Готовим вебинар про AI в разработке и хотим сделать его максимально полезным

Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?


🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь.

Задавайте всё, что давно хотелось спросить 📍

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🔐 Sqids в Laravel: короткие публичные ID

Автоинкрементные ID удобны в базе, но не всегда подходят для публичных URL.

Sqids превращают их в короткие строки:


637 → 4nxk2a


При этом внутри Laravel остаются обычные integer-ключи, связи Eloquent и индексы.

В статье показано, как встроить Sqids в:

🟡 route model binding;
🟡 API Resources;
🟡 foreign keys;
🟡 входящие запросы.

🔗 Документация

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
3😢1
This media is not supported in your browser
VIEW IN TELEGRAM
🌸 Вселенная намекает: пора уже начать этот курс

С 14 сентября цены в Proglib Academy вырастут на 20% 👀

Так что если курс давно ждёт своего часа — лучше не откладывать ещё на месяц 😏

📍 Выбрать курс
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6🌚3
🌞 PayZephyr: единый API для платежей в Laravel

Stripe, PayPal, Paystack и другие платёжные системы — через один интерфейс. PayZephyr объединяет работу с 8 провайдерами и предлагает:

— единый API для платежей;
— переключение между провайдерами и failover;
— защиту от повторного списания;
— проверку подписей вебхуков;
— возвраты и подписки.


🔘 Пример:

Payment::amount(100)
->currency('USD')
->pay();


🔘 Возврат:


Payment::refund($paymentId);


🔘 Установка:

composer require payzephyr/laravel


📌 Подойдёт, если приложение работает с несколькими платёжными системами и хочется не писать отдельную интеграцию для каждой.

🔗GitHub

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍3
😭 Как не потратить недельный лимит AI-кодинга за три дня?

Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.

🔘 Поговорим о том:

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

✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.

⬇️ 17 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок

💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.

🔗 Зарегистрироваться на вебинар⁠
Please open Telegram to view this post
VIEW IN TELEGRAM
1🥱1
💰 Версионирование бизнес-правил в Laravel

Бизнес-правила меняются, но старые решения должны оставаться объяснимыми. Например, цена для одного и того же автомобиля может отличаться в зависимости от даты счёта.

Пакет Laravel Rulebook помогает:

🤩 хранить правила в отдельных PHP-классах;
🤩 задавать периоды действия;
🤩 выбирать правило по приоритету;
🤩 объяснять, почему оно победило;
🤩 сохранять результат решения в snapshot.


Пример:


$decision = $rulebook->resolveAt(
subject: $vehicle,
at: $invoice->issued_at,
context: $pricingContext,
);
$price = $decision->outcome();
$reason = $decision->winningResult()->reason();


Подходит для pricing, billing, eligibility и других сценариев, где важна история решений.

🔗 ⁠Laravel Rulebook на Packagist

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
⚡️ Symfony 8.2: команды Console теперь можно вызывать через пробелы

В Symfony команды обычно записываются через ::


php bin/console tenant:users:import customers.csv


➡️ В Symfony 8.2 появился альтернативный синтаксис:


php bin/console tenant users import customers.csv


Оба варианта запускают одну и ту же команду.

Главное отличие — в spaced-синтаксисе каждый уровень может обрабатывать собственные опции:


php bin/console tenant --name=acme users import customers.csv --dry-run


Здесь:

🔘 tenant получает опцию --name;
🔘 users — промежуточный уровень;
🔘 import запускает конечную команду;
🔘 --dry-run передаётся последней команде.


Для доступа к параметрам родительских команд появился CommandChain:


public function __invoke(
CommandChain $chain,
#[Argument] string $file,
): int {
$tenantName = $chain
->getInput('tenant')
?->getOption('name');

// ...
}


Также Symfony 8.2 позволяет описывать целые группы команд в одном классе через #[AsCommand].

📌 Особенно полезно для CLI-приложений с многоуровневой структурой — например, docker compose, git или административных инструментов.

🔗Читать подробнее

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😢2
🛠 `str_contains` и семья: проверяем строки без ловушек

Проверка через strpos годами путала новичков:


if (strpos($url, 'https') !== false) {
// ...
}


➡️ Почему нужен именно `!== false`?
Потому что совпадение в начале строки возвращает позицию 0, а 0 в PHP может трактоваться как false.

С PHP 8.0 есть три функции, которые сразу возвращают `bool`:


str_contains($email, '@'); // содержит подстроку
str_starts_with($url, 'https://'); // начинается с
str_ends_with($file, '.pdf'); // заканчивается на


Код читается проще — без проверки позиции и !== false.

📌 strpos всё ещё нужен, если требуется узнать позицию совпадения.

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4🔥2
А вы уже забрали свой подарок ко Дню программиста?

К вашему профессиональному празднику Tproger, Proglib, Столото, Центральный университет и SmartApe собрали целую коробку подарков. Переходите по ссылке, трясите коробку и забирайте свой презент: https://tprg.ru/ZX3b

Реклама. ИП Михайлишина Гузель Фаниловна, erid: 2W5zFJrVGHw
👍2🥱1
🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и Cache сами поставляют конфигурацию и сервисы.

Было:


framework:
mailer:
dsn: '%env(MAILER_DSN)%’


Стало:


mailer:
dsn: '%env(MAILER_DSN)%’


Старый framework.* при этом продолжает работать — существующие проекты менять не нужно.

➡️ Ещё одно изменение: Forms больше не включает Validation автоматически. Для него теперь нужен symfony/validator.

🔗 Источник

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Какие существуют проблемы в многопоточной среде?

Основные проблемы многопоточности:

1️⃣ Race Condition — когда результат работы зависит от порядка выполнения потоков. Например, два потока одновременно изменяют одну переменную без синхронизации.

2️⃣ Deadlock — взаимная блокировка, когда потоки ждут друг друга. Классика: поток А держит ресурс 1 и ждёт ресурс 2, а поток Б держит ресурс 2 и ждёт ресурс 1.

2️⃣ Livelock — потоки активны, но не могут продолжить работу, постоянно реагируя на действия друг друга. Например, как два человека в коридоре, которые одновременно пытаются уступить дорогу.

4️⃣ Starvation — поток никогда не получает доступ к ресурсу из-за того, что другие потоки постоянно его перехватывают.

5️⃣ Memory Visibility — изменения, сделанные одним потоком, могут быть не видны другим из-за кэширования в CPU

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63👾2
⚡️ PHP 8.6 выйдет 19 ноября 2026 года. Сейчас версия находится в beta.

Самые заметные изменения:

🔴 Partial Function Application

Можно зафиксировать часть аргументов функции:


$makeSlug = str_replace(' ', '-', ?);

$makeSlug('Hello World');
// Hello-World


🔴 clamp()

Наконец отдельная функция для ограничения значения:


clamp(101, min: 0, max: 100);
// 100


🔴 Time\Duration

Тип для представления длительности с наносекундной точностью:


$delay = Duration::fromMilliseconds(100)
->multiplyBy(2 ** $attempt);


🔴 Readonly-свойства с default value


public string $name = 'migration’;


И ещё: для новых установок PHP меняет defaults native sessions — strict_mode и HttpOnly включаются, а SameSite становится Lax.

📌 Feature freeze — 22 сентября, первый RC — 24 сентября.

🔗 Подробнее

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6🥱3