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.
Installation
composer require php-standard-library/comparison
No additional configuration is required—just autoload the package.
First Use Case: Basic Equality Check
use PhpStandardLibrary\Comparison\Comparator;
$comparator = new Comparator();
$isEqual = $comparator->equals(42, 42); // true
$isNotEqual = $comparator->notEquals(42, "42"); // true (strict comparison)
Where to Look First
Comparator class: Core utility for equality checks.OrderComparator class: For sorting and ordering logic.ComparisonException: Handle edge cases (e.g., type mismatches).Replace ad-hoc ===/!== with reusable methods:
// Before
if ($user->age === 25) { ... }
// After
$comparator->equals($user->age, 25);
Use OrderComparator for consistent sorting logic:
use PhpStandardLibrary\Comparison\OrderComparator;
$orderComparator = new OrderComparator();
$users = collect($users)->sortBy(
fn ($user) => $orderComparator->asc($user->created_at)
);
Extend the package for custom logic (e.g., comparing DateTime objects):
$comparator->customEquals(
fn ($a, $b) => $a->format('Y-m-d') === $b->format('Y-m-d'),
$date1,
$date2
);
Comparator/OrderComparator as singletons.public function rules()
{
return [
'password' => ['required', function ($attribute, $value, $fail) {
$comparator = app(Comparator::class);
if (!$comparator->equals($value, $this->repeated_password)) {
$fail('Passwords do not match.');
}
}],
];
}
Strict Comparisons by Default
equals() uses ===; use looseEquals() for == behavior:
$comparator->looseEquals(42, "42"); // true
Null Handling
Explicitly check for null if needed:
$comparator->equals($value, null); // false if $value is not null
Performance in Loops Instantiate comparators once (e.g., as a service container binding) to avoid overhead.
try-catch for ComparisonException.customEquals()/customOrder():
$comparator->customEquals(
fn ($a, $b) => is_numeric($a) && is_numeric($b) ? $a == $b : false,
$a,
$b
);
Custom Comparators
Implement ComparatorInterface for domain-specific rules:
class UserComparator implements ComparatorInterface {
public function equals($a, $b): bool { ... }
}
OrderComparator Extensions Add custom sort keys:
$orderComparator->customOrder(
fn ($user) => $user->priority ?? 0
);
Laravel Macros
Extend Comparator via service provider:
Comparator::macro('isActive', function ($value) {
return $this->equals($value, true) || $this->equals($value, 'active');
});
How can I help you explore Laravel packages today?