Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Статті за тегом «PHP»

Статті, новини, туторіали та переклади від учасників спільноти

No results.
Tips 02 вересня 2026

lazy() - колекції без перевантаження пам'яті

Якщо обробляється 50 000 елементів і застосовується 10 методів, звичайна колекція створить 10 копій у пам'яті.

Lazy колекції обробляють один елемент за раз.

Як працює:

Елемент проходить через усі методи і лише потім переходить до наступного.

Коли варто використовувати:

  • Великі файли
  • Стрімінг
  • Генератори
  • Обмежена пам'ять

Порада: перетворити назад у звичайну колекцію - all().

// Погано: багато копій у пам'яті
$result = collect($hugeArray)
  ->filter(...)
  ->map(...)
  ->sortBy(...)
  ->take(100);

// Добре: один елемент за раз
$result = collect($hugeArray)
  ->lazy()
  ->filter(...)
  ->map(...)
  ->sortBy(...)
  ->take(100)
  ->all();

// Великий CSV
$users = LazyCollection::make(function () {
  $h = fopen('users.csv', 'r');
  while ($line = fgets($h)) {
    yield $line;
  }
  fclose($h);
})->map(fn($l) => str_getcsv($l));

// cursor() - вже lazy
User::cursor();
Tips 31 серпня 2026

tap() - дебаг без зміни ланцюжка

Потрібно подивитися стан колекції в середині ланцюга?

tap() дозволяє "підглянути" в колекцію, не змінюючи її.

Як працює:

Callback отримує колекцію, але повернуте значення ігнорується.

Сценарії:

  • Дебаг
  • Логування
  • Побічні ефекти

Різниця з pipe():

  • pipe() використовує значення, яке повернув callback
  • tap() ігнорує і продовжує з оригіналом
5
$result = $users
  ->where('active', true)
  ->tap(fn($c) => logger("Active: {$c->count()}"))
  ->where('role', 'admin')
  ->tap(fn($c) => logger("Admins: {$c->count()}"))
  ->get();

// Порівняння
$collection->pipe(fn($c) => $c->count()); // повертає число
$collection->tap(fn($c) => $c->count()); // повертає колекцію
Tips 28 серпня 2026

pipe() - кастомна логіка у ланцюжку

Потрібно застосувати складну логіку до всієї колекції?

pipe() передає в callback усю колекцію і повертає те, що callback повернув.

Переваги:

  • Гнучка логіка
  • Розбиття складних ланцюжків
  • Умовні трансформації
  • Дебаг

Різниця з map():

  • map() - елемент за елементом
  • pipe() - вся колекція одразу

Порада: використовувати іменовані функції для читабельності.

5
$result = $users
  ->where('active', true)
  ->pipe(fn($c) => $c->sortBy('last_login')->take(10))
  ->values();

// Умовне сортування
$posts = Post::all()->pipe(function ($posts) use ($request) {
  return $request->sort === 'popular'
    ? $posts->sortByDesc('views')
    : $posts->sortByDesc('created_at');
});

// Дебаг
$result = $users
  ->where('active', true)
  ->pipe(fn($c) => tap($c, fn($c) => logger($c->count())))
  ->where('role', 'admin');
Патерн Event Sourcing
Посібники 27 серпня 2026
Патерни проєктування

Event Sourcing - події як джерело істини

Зберігає не поточний стан, а послідовність подій, що його змінювали. Повний аудит і відтворюваність - ціною складнішої інфраструктури.

TypePHP
Новини 27 серпня 2026

TypePHP: компілятор PHP у нативні бінарники від команди Swoole

Команда Swoole відкрила вихідний код TypePHP - AOT-компілятора, що перетворює PHP-код у нативний машинний код через C++. Проєкт випущено раніше запланованого терміну й повністю написаний на PHP, включаючи самокомпіляцію.

1
Tips 26 серпня 2026

partition() - поділ колекції на дві частини

Потрібно поділити користувачів на активних і неактивних?

partition() повертає одразу дві групи.

Різниця з filter():

  • filter() повертає лише truthy
  • partition() повертає truthy і falsy одразу

Сценарії:

  • Валідні / невалідні дані
  • Passed / failed
  • Approved / pending

Порада: зручно для різних обробок двох груп.

6
[$active, $inactive] = $users->partition(fn($u) => $u->active);

// Дві різні обробки
$active->each(fn($u) => ...);
$inactive->each(fn($u) => ...);

// Валідація
[$valid, $invalid] = $orders->partition(fn($o) =>
  $o->total > 0 && $o->email !== null
);

// Студенти
[$passed, $failed] = $students->partition(
  fn($s) => $s->score >= 60
);

Матеріали за темою «PHP»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.

Зараз опубліковано 87 матеріалів від 3 авторів. Останній матеріал - 11 вересня 2026.