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

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

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

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

whenEmpty() та whenNotEmpty() - умовні операції

Потрібно виконувати код лише тоді, коли колекція порожня або непорожня? if/else роблять код об'ємним.

whenEmpty() та whenNotEmpty() роблять це чисто.

Приклади використання:

  • Показати контент за замовчуванням
  • Логувати попередження
  • Запускати fallback-логіку
  • Присвоювати значення за замовчуванням

Перевага:

Методи ланцюжаться та зберігають fluent-синтаксис.

Порада: значення, повернуте з callback, стає новим значенням колекції.

$users = User::where('active', true)->get();

// ПОГАНО: розривається ланцюжок
if ($users->isEmpty()) {
  return redirect()->back()->with('error', 'No active users');
}

// ДОБРЕ: fluent-синтаксис
$users->whenEmpty(function () {
  return redirect()->back()->with('error', 'No active users');
});

// Додати елементи за замовчуванням, якщо порожньо
$products = Product::where('featured', true)->get();

$products = $products->whenEmpty(function ($collection) {
  return Product::latest()->limit(5)->get();
});

// Логування, якщо непорожня
$errors->whenNotEmpty(function ($collection) {
  Log::error('Validation errors found', $collection->toArray());
});

// З "else"
$users->whenEmpty(
  fn($collection) => ['name' => 'Guest'],
  fn($collection) => $collection->first()
);
// API-відповідь із fallback
return response()->json([
  'users' => $users->whenEmpty(fn() => collect([
    ['name' => 'No users found', 'id' => null]
  ]))
]);

// Ланцюжок операцій
$results = collect($searchResults)
  ->whenEmpty(fn() => $this->getDefaultResults())
  ->take(10)
  ->map(fn($item) => $this->format($item));

// Прогрів кешу
$cached = Cache::get('popular_posts');

collect($cached)->whenEmpty(function () {
  $posts = Post::popular()->get();
  Cache::put('popular_posts', $posts, 3600);
  return $posts;
});

// Надсилання email-дайджесту
$notifications->whenNotEmpty(function ($items) {
  Mail::to($user)->send(new NotificationDigest($items));
});
Fuzz для Pest
Новини 09 вересня 2026

Знайдіть несподівані тестові дані за допомогою Fuzz для Pest

Пакет Fuzz від Джона Пурвіса дозволяє проводити фаз-тестування безпосередньо в Pest 5, генеруючи різноманітні вхідні дані для виявлення помилок, які важко передбачити вручну. Інструмент використовує coverage-guided підхід для ефективного дослідження коду.

10
Laravel Rulebook
Новини 08 вересня 2026

Laravel Rulebook: Бізнес-Правила, Що Змінюються з Часом

Laravel Rulebook - новий пакет для керування бізнес-правилами, які змінюються з часом. Він дозволяє зберігати історію політик у коді, точно визначати, яке правило діяло на конкретну дату, та пояснювати рішення, прийняті місяці тому.

28
Tips 07 вересня 2026

firstWhere() - Пошук елемента за атрибутом

Потрібно знайти перший елемент, що відповідає умові?

firstWhere() виглядає чистіше, ніж filter()->first().

Переваги:

  • Один метод замість двох
  • Автоматична обробка null
  • Підтримує оператори

Оператори:

Такі ж, як у where(): =, !=, >, <, >=, <=

Порада: використовуйте другий параметр для значення за замовчуванням, якщо елемент не знайдено.

$users = collect([
  ['id' => 1, 'name' => 'John', 'age' => 25],
  ['id' => 2, 'name' => 'Jane', 'age' => 30],
  ['id' => 3, 'name' => 'Bob', 'age' => 35],
]);

// ПОГАНО: два методи
$user = $users->filter(fn($u) => $u['age'] > 30)->first();

// ДОБРЕ: один метод
$user = $users->firstWhere('age', '>', 30);
// ['id' => 3, 'name' => 'Bob', 'age' => 35]

// Точна відповідність (оператор за замовчуванням - =)
$user = $users->firstWhere('name', 'Jane');

// Із значенням за замовчуванням
$guest = ['name' => 'Guest'];
$user = $users->firstWhere('age', '>', 100) ?? $guest;

// Eloquent-колекції
$featured = Post::all()->firstWhere('featured', true);

// Кілька умов - first із callback
$user = $users->first(
  fn($u) => $u['age'] > 30 && $u['name'] !== 'Bob'
);
Tips 04 вересня 2026

unique() - інтелектуальне видалення дублікатів

Є дублікати email? Перевіряти вручну необов'язково.

unique() видаляє дублікати.

Як працює:

Залишає перше значення, інші прибирає.

Розширення:

  • Унікальність за ключем
  • Унікальність за callback
  • Строге порівняння

Порада: uniqueStrict() враховує тип (1 !== "1").

$numbers = collect([1, 2, 2, 3, 3, 4]);
$unique = $numbers->unique();
// [1, 2, 3, 4]

// За ключем
$users = collect([
  ['id' => 1, 'email' => 'john@example.com'],
  ['id' => 2, 'email' => 'jane@example.com'],
  ['id' => 3, 'email' => 'john@example.com'],
]);

$uniqueByEmail = $users->unique('email');

// За callback
$products = collect([
  ['name' => 'iPhone', 'price' => 999],
  ['name' => 'Samsung', 'price' => 999],
  ['name' => 'iPad', 'price' => 799],
]);

$uniqueByPrice = $products->unique(fn($i) => $i['price']);

// Строге порівняння
collect([1, '1', 2, '2'])->unique();       // [1, 2]
collect([1, '1', 2, '2'])->uniqueStrict(); // [1, '1', 2, '2']

// Скинути ключі
$unique->values();
chunkBy()
Новини 04 вересня 2026

Групування сусідніх елементів колекції в Laravel за допомогою chunkBy()

Laravel 13.30 представляє новий метод chunkBy() для колекцій, який спрощує групування сусідніх елементів з однаковим значенням. Це зручна альтернатива chunkWhile() для найпоширеніших випадків використання.

25
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();

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

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