TGViewer
PHP Academy PHP Academy @phpshka · 9.25K subscribers
Post #581 1.55K
Сегодня покажу вам простой, но очень удобный приём, который помогает наводить порядок в больших PHP-проектах — использование кастомных коллекций вместо массивов.

Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или null — и привет, баги.

Я стал использовать свои классы коллекций. Простой пример:


class UserCollection
{
/** @var User[] */
private array $users = [];

public function __construct(array $users = [])
{
foreach ($users as $user) {
$this->add($user);
}
}

public function add(User $user): void
{
$this->users[] = $user;
}

public function all(): array
{
return $this->users;
}

public function filterByActive(): self
{
return new self(array_filter($this->users, fn(User $u) => $u->isActive()));
}

// и так далее
}


Теперь везде, где раньше был User[], я работаю с UserCollection. Это сразу даёт:

- типизацию (и защиту от мусора),
- автодополнение в IDE,
- методы прямо в коллекции (например, filterByActive, sortByName, first() и т.д.),
- чище и понятнее сигнатуры методов.

Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым.

Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
  • 👍 14
  • ❤ 3
More from @phpshka
  1. Sep 15, 2026🐘 Что нового в PHP 8.6 Релиз запланирован на 19 ноября 2026 года, сейчас версия проходит…
  2. Aug 26, 2026💡Совет по Laravel Знаешь ли ты, что можно выбрасывать исключения условно всего в одну стр…
  3. Aug 26, 2026Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для пр…
  4. Aug 25, 2026Сегодня хочу рассказать вам про одну ошибку, которую я часто встречаю у начинающих PHP-раз…
  5. Aug 22, 2026🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажет…
  6. Aug 17, 2026Сегодня я покажу вам, как удобно логировать в 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 →