TGViewer
Библиотека собеса по PHP | вопросы с собеседований Библиотека собеса по PHP | вопросы с собеседований @php_interview_lib · 3.1K subscribers
Post #1294 2.56K
✔️ PHP-тест: список, который иногда становится объектом

Мобилка падает на парсинге ответа. Только у части пользователей. У остальных — всё ок.

📦 Задание

Эндпоинт /api/products/available отдаёт товары в наличии. Бэкенд не трогали месяц. Внезапно прилетает баг от мобильной команды: «приложение крашится при разборе items, иногда это массив, иногда какой-то объект с числовыми ключами». На стейджинге не воспроизводится — там тестовые данные, все товары в наличии.

// src/Api/ProductController.php
class ProductController
{
public function __construct(
private readonly ProductRepository $repository,
) {}

public function available(): JsonResponse
{
$products = $this->repository->findAll();

$available = array_filter(
$products,
fn (Product $p): bool => $p->getStock() > 0,
);

return new JsonResponse([
'items' => $available,
'count' => count($available),
]);
}
}


🔹 Задачи

— Объяснить, почему форма ответа items зависит от данных: то массив, то объект
— Объяснить, при каком наборе товаров json_encode отдаёт {"0":…, "2":…} вместо […]
— Исправить так, чтобы items гарантированно сериализовался как JSON-массив

Ставьте → 🔥 если нравится формат. Если нет → 🌚

💬 Решения пишите в комменты под спойлер — сравним подходы.
  • 🔥 7
  • 👍 2
  • ❤ 1
More from @php_interview_lib
  1. Sep 15, 2026❓ Расскажите о паттерне Bridge Bridge — это структурный паттерн, который разделяет абстрак…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Aug 4, 2026Какова разница между «cookie» и «session»? В PHP «cookie» и «session» — это механизмы упра…
  4. Aug 4, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
  5. Aug 4, 2026Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
  6. Jul 31, 2026❓ Объясни разницу между Gate и Policy в Laravel? Оба инструмента для авторизации, но с раз…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →