-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Access
github-actions[bot] edited this page Jul 16, 2026
·
1 revision
Чтение элементов и проверки состава коллекции: first/last/get с default-значениями
и предикатами, контрактные firstOrFail/sole, строгие contains/search,
has/hasAny/every/some.
Методы доступа не выбрасывают ошибок на промахе — возвращают null или переданный
default. Когда отсутствие элемента — ошибка бизнес-логики, используются контрактные
firstOrFail/sole: они бросают ItemNotFoundException/MultipleItemsFoundException
с различением «коллекция пуста» и «нет совпадения». Все сравнения — строгие (===).
use CloudCastle\Collection\Collection;
$c = Collection::make(['a' => 1, 'b' => 2, 'c' => 3]);
$c->get('a'); // 1
$c->get('zz', 'default'); // 'default'
$c->first(); // 1
$c->last(fn ($v) => $v < 3); // 2
// Контрактные исключения
$c->firstOrFail(fn ($v) => $v > 99); // ItemNotFoundException («нет элемента»)
Collection::make([5])->sole(); // 5
Collection::make([1, 1])->sole(); // MultipleItemsFoundException
// Строгие проверки
$c->contains(2); // true
$c->contains('2'); // false — строка не равна int
$c->search(3); // 'c'
$c->has('a', 'b'); // true (все ключи)
$c->hasAny('zz', 'a');// true (хотя бы один)
$c->every(fn ($v) => $v > 0); // true- Строгий
containsисключает ловушки0 == 'admin'и'0e123' == '0e456'. -
firstOrFail/soleделают «ровно один результат» проверяемым контрактом. - Предикаты доступны везде:
first/last/search/containsпринимают замыкание. - Различение
empty()/noMatch()в исключениях упрощает диагностику.
- Мигрирующим с
illuminateнужно помнить: нестрогого режима нет —contains('1')на коллекции[1]вернётfalse(это намеренно).
- Проверять права/идентификаторы только строгим
contains/whereIn. - Использовать
sole()там, где дубль — ошибка данных (уникальный e-mail, один активный договор). - Передавать default в
get/firstвместо проверокisEmpty()перед чтением.
-
$c->filter(...)->count() > 0вместо$c->some(...)— лишний проход и аллокация. - Полагаться на приведение типов при поиске: приводите значение явно до
contains.
CloudCastle Collection · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)