php-standard-library/comparison
Lightweight PHP comparison helpers from php-standard-library. Provides simple, reusable utilities for comparing values consistently across your codebase, aiming to reduce boilerplate and make sorting/equality checks easier in small projects.
Pros:
if-else or ternary checks.Cons:
strtolower() or type casting utilities).null values in domain objects.Collection::sortBy() with standardized comparators for complex rules.?sort=price:desc).where()/orderBy().{{ $user->isActive() ? 'Yes' : 'No' }} → {{ $user->isActive() ? comparison()->yesNo() }}).Money, DateRange).if ($a > $b)) may require IDE tooling or tests to validate correctness.Collection methods or Spatie’s Laravel Query Builder extensions suffice?sortBy(), sortByDesc(), or custom usort() with Comparison::sort().DB::macro('orderByComparator', ...)).OrderService::comparePrices()).comparison()->formatDate($date)) or directives for reusable syntax.SortableRequest::applyComparator()).if/else or ternary checks in services/controllers with comparator methods.// Before
if ($user->role === 'admin') { ... }
// After
if (Comparison::is($user->role, 'admin')) { ... }
Collection and Query Builder:
// Collection
$users->sortByComparator('created_at', 'desc');
// Query Builder
User::query()->orderByComparator('age')->get();
Money, DateRange).Comparison::compare($order1->total, $order2->total, '>', 'price');
SortableRequest trait).| Priority | Task | Effort | Dependencies |
|---|---|---|---|
| 1 | Replace ad-hoc comparisons | Low | None |
| 2 | Add Collection helpers | Medium | Phase 1 |
| 3 | Query Builder macros | High | Phase 2 |
| 4 | Domain object adapters | Medium | Phase 1 |
| 5 | API/Blade integration | Low | Phase 3 |
=== vs. ==).Comparison::is($a, $b) vs. $a === $b).Comparison::isValidDiscount()).| Risk | Mitigation Strategy |
|---|---|
| Incorrect comparator logic | Write property-based tests for all comparators. |
| Query performance degradation | Profile with DB::enableQueryLog(); add indexes. |
| Type safety issues | Use PHP 8.1+ enums or runtime type checks. |
| Over-engineering | Start small; measure impact before full adoption. |
| Legacy code conflicts | Use feature flags for gradual migration. |
How can I help you explore Laravel packages today?