php-standard-library/comparison
Small PHP comparison utilities that provide consistent, reusable ways to compare values. Useful for sorting, equality checks, and custom comparator functions without rewriting boilerplate across your projects.
Pros:
===/== usage. Supports PHP 8.1+ features (e.g., named arguments, enums) for future-proofing.Cons:
WHERE price BETWEEN ? AND ?).null-aware comparisons in domain objects (e.g., Optional types).Symfony\Component\PropertyAccess or doctrine/collections).High Feasibility:
Collection::sortBy() or usort() with comparator methods (e.g., Comparator::asc()).OrderComparisonService).?sort=price:desc → Comparator::desc('price')).if ($value > MAX_LIMIT)) with Comparator::greaterThan($value, MAX_LIMIT).Moderate Feasibility:
DB::macro('orderByComparator', ...)). Risk of SQL injection if not sanitized.@comparison('>', $a, $b)) or custom directives for readability.if ($a > $b)) may require IDE tooling (e.g., PHPStorm’s "Replace" feature) or tests to validate correctness.Low Feasibility:
Money, DateRange) may need adapters to work with comparators.Comparator::greaterThan()) may introduce micro-overhead vs. native operators (benchmark required).Low Risk:
Medium Risk:
NULL handling in BETWEEN clauses).instanceof).High Risk:
NaN, Infinity, custom objects).if-else) may introduce regression bugs without proper test coverage.Strategic Fit:
Integration Depth:
@comparison, Comparator::format())?Performance:
Comparator::isValidDiscount())?Testing and Quality:
Alternatives:
doctrine/collections) or fuzzy matching (e.g., rubix/ml)?Long-Term Maintenance:
| Laravel Component | Integration Strategy | Example Use Case |
|---|---|---|
| Collections | Replace sortBy(), usort() with comparators |
$users->sortByComparator('created_at', 'desc') |
| Query Builder | Global macros or scopes for SQL translation | User::query()->orderByComparator('age') |
| Eloquent Models | Accessors/mutators or custom traits | $order->isOverBudget() → Comparator::greaterThan($order->total, MAX_BUDGET) |
| Service Layer | Centralize business logic comparisons | OrderService::comparePrices($order1, $order2) |
| API Requests | Parse sort/filter params into comparators |
SortableRequest::applyComparator() |
| Blade Templates | Helper functions or directives | @comparison('>', $user->score, 100) |
| Validation | Replace manual checks with comparators | Rule::custom('max_price', fn($attr, $value) => Comparator::lessThan($value, MAX_PRICE)) |
if ($a > $b)) in a single service.Collection methods:
Collection::macro('sortByComparator', function ($key, $direction) {
return $this->sortBy(fn($item) => Comparator::{$direction}($item[$key]));
});
orderBy/where:
DB::macro('orderByComparator', function ($column, $direction = 'asc') {
return $this->orderByRaw("FIELD($column, " . Comparator::getSqlValues($column, $direction) . ")");
});
DiscountService).How can I help you explore Laravel packages today?