Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Все самое полезное для пхпшника в одном канале. По рекламе: @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 463 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 11 707-o'rinni va Rossiya mintaqasida 60 816-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 10 463 obunachiga ega bo‘ldi.
27 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -37 ga, so‘nggi 24 soatda esa -2 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 16.71% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 7.56% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 748 marta ko‘riladi; birinchi sutkada odatda 791 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 1 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 28 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.
class ConfigurationTest extends TestCase
{
use ConfigurationTestCaseTrait;
protected function getConfiguration(): Configuration
{
return new Configuration();
}
public function test_invalid(): void
{
$this->assertConfigurationIsInvalid(
[[]], // пустой массив
'required_value'
);
}
public function test_processed(): void
{
$this->assertProcessedConfigurationEquals(
[['key' => 'first'], ['key' => 'last']],
['key' => 'last']
);
}
}
Через параметр breadcrumbPath можно тестировать отдельную ветку дерева (например, doctrine.orm), игнорируя остальные required-ноды. Версия 6.x поддерживает PHPUnit 10–12.
Репозиторий на GitHub
Библиотека пхпшника
#release_radar// Lexer: режет строку на токены через preg_match
// Parser: рекурсивный спуск → AST с приоритетами
// Interpreter: обход дерева + контекст
$rule = 'user.age >= 18 and (user.has_vip or user.orders_count > 5)';
$tokens = (new Lexer($rule))->getTokens();
$ast = (new Parser($tokens))->parse();
$result = (new Interpreter($context))->evaluate($ast);
// true | false — без eval, без магии
Парсер строит BinaryOpNode / UnaryOpNode, интерпретатор резолвит переменные через explode('.', $name) и match по операторам. Никакого eval — дерево объектов и рекурсия.
Расширяется под промокоды, скоринг, ACL и любые гибкие системы, где правила хранятся в БД как строки.
🔗 Читать оригинал — полный код всех трёх классов с тестами.
Библиотека пхпшника
#php_coreecho date('Y-m-d H:i:s');
echo date('Y-m-d', 1710938096);
Скрипты, логи, простой вывод — здесь date() вполне уместна. Она форматирует Unix timestamp, опираясь на системную timezone.
🔹 DateTimeImmutable для всего остального
$date = new DateTimeImmutable('2026-03-20 14:30:45', new DateTimeZone('Europe/Paris'));
echo $date->format('Y-m-d H:i:s T');
// 2026-03-20 14:30:45 CET
echo $date->setTimezone(new DateTimeZone('America/New_York'))->format('Y-m-d H:i:s T');
// 2026-03-20 09:30:45 EDT
Timezone живёт внутри объекта, а не берётся из глобального контекста. Это критично, когда в проекте есть очереди, API, мультирегиональность или локаль пользователя.
🔹 date_format() просто обёртка
date_format($date, 'Y-m-d'); // то же самое, что $date->format('Y-m-d')
Процедурный стиль для тех, кто не может расстаться с PHP 5-мышлением
🔹 Готовые форматы на каждый день
// Хранение в БД / логи
$date->format('Y-m-d H:i:s');
// ISO 8601 / API
$date->format('c'); // или DATE_ATOM
// Человекочитаемый
$date->format('d F Y'); // 20 March 2026
// 12-часовой формат
$date->format('g:i A'); // 2:30 PM
🔹 Экранирование в строке формата
Буквы a, t, m и другие — зарезервированные токены. Если нужен литерал, экранируй бэкслешем:
echo date('Y-m-d \a\t H:i', 1710938096);
// 2024-03-20 at 12:34Как эффективно управлять контекстным окном LLM в мультиагентных системах и не сливать бюджет на токеныЖдем вас сегодня в 19:00 по московскому времени. Не пропустите начало, будет много практики! 👉 Успей занять место
composer require --dev buggregator/trap -W.
Запускается:
vendor/bin/trap.
Никакого Docker (написан целиком на PHP).
Функция trap() заменяет dump() и шлёт данные на локальный сервер:
trap($veryDeepArray)->depth(3);
trap($item)->times(3); // не больше 3 дампов
trap($response)->return(); // дампнуть и вернуть значение
Автоматически распознаёт тип трафика на одном порту, так что не нужно открывать отдельные пакеты для var-dumper, SMTP и Sentry. Есть шорткаты: tr() для дампа с возвратом, td() для дампа с die. Плагин для PhpStorm тоже в наличии.
🔗 Репозиторий на GitHub
🐸 Библиотека пхпшникаphp// ❌ старый способ
$key = array_keys($data)[0];
// ✅ чистый нативный
$key = array_key_first($data);
$last = array_key_last($data);
// работает с ассоциативными тоже
$map = ['foo' => 1, 'bar' => 2];
array_key_first($map); // 'foo'
Не мутирует массив (в отличие от reset()), не создаёт лишний массив ключей — просто возвращает ключ или null если массив пустой.
🔥 Пока разбираетесь с массивами — параллельно можно освоить ИИ-агентов. 4 места до 30 апреля.
🐸 Библиотека пхпшника
#vardump$users = User::with('orders')->get();
// Eloquent грузит все связанные модели в память
// затем PHP считает count() на уже загруженной коллекции
foreach ($users as $user) {
echo $user->orders->count();
}
✅ Правильно
$users = User::withCount('orders')->get();
// Генерирует подзапрос: SELECT count(*) as orders_count
// Один SQL-запрос, ноль лишних объектов в памяти
foreach ($users as $user) {
echo $user->orders_count;
}
Доступные хелперы одного семейства:
User::withSum('orders', 'total') // orders_sum_total
User::withAvg('reviews', 'rating') // reviews_avg_rating
User::withMin('orders', 'total') // orders_min_total
User::withMax('orders', 'total') // orders_max_total
Каждый из них транслируется в коррелированный подзапрос.
А цепочка из нескольких всё равно будет одни основным SELECT'ом.
Применимо когда:
— рендеришь список с агрегированными метриками;
— строишь API без лишних аллокаций;
— профилируешь и видишь with() там, где нужна только цифра.with('orders') подгружает всю коллекцию моделей в память.
Если нужна только цифра — это избыточно.
❌ Антипаттерн:
$users = User::with('orders')->get();
// Eloquent грузит все связанные модели в память
// затем PHP считает count() на уже загруженной коллекции
foreach ($users as $user) {
echo $user->orders->count();
}
✅ Правильно:
$users = User::withCount('orders')->get();
// Генерирует подзапрос: SELECT count(*) as orders_count
// Один SQL-запрос, ноль лишних объектов в памяти
foreach ($users as $user) {
echo $user->orders_count;
}
Доступные хелперы одного семейства:
User::withSum('orders', 'total') // orders_sum_total
User::withAvg('reviews', 'rating') // reviews_avg_rating
User::withMin('orders', 'total') // orders_min_total
User::withMax('orders', 'total') // orders_max_total
Каждый из них транслируется в коррелированный подзапрос.
Цепочка из нескольких — всё равно один основной SELECT.
---
Применимо когда:
— рендеришь список с агрегированными метриками
— строишь API без лишних аллокаций
— профилируешь и видишь with() там, где нужна только цифра
---
#laravel #php #eloquent #performance #backend