class NumberComparator
NumberComparator compiles a simple comparison to an anonymous subroutine, which you can call with a value to be tested again.
Now this would be very pointless, if NumberCompare didn't understand magnitudes.
The target value may use magnitudes of kilobytes (k, ki), megabytes (m, mi), or gigabytes (g, gi). Those suffixed with an i use the appropriate 2**n version in accordance with the IEC standard: http://physics.nist.gov/cuu/Units/binary.html
Based on the Perl Number::Compare module.
@author Fabien Potencier <fabien@symfony.com> PHP port @author Richard Clamp <richardc@unixbeard.net> Perl version @copyright 2004-2005 Fabien Potencier <fabien@symfony.com> @copyright 2002 Richard Clamp <richardc@unixbeard.net>
Hierarchy
- class \Symfony\Component\Finder\Comparator\Comparator
- class \Symfony\Component\Finder\Comparator\NumberComparator extends \Symfony\Component\Finder\Comparator\Comparator
Expanded class hierarchy of NumberComparator
See also
http://physics.nist.gov/cuu/Units/binary.html
2 files declare their use of NumberComparator
- Finder.php in vendor/
symfony/ finder/ Finder.php - SizeRangeFilterIterator.php in vendor/
symfony/ finder/ Iterator/ SizeRangeFilterIterator.php
File
-
vendor/
symfony/ finder/ Comparator/ NumberComparator.php, line 35
Namespace
Symfony\Component\Finder\ComparatorView source
class NumberComparator extends Comparator {
/**
* @param string|null $test A comparison string or null
*
* @throws \InvalidArgumentException If the test is not understood
*/
public function __construct(?string $test) {
if (null === $test || !preg_match('#^\\s*(==|!=|[<>]=?)?\\s*([0-9\\.]+)\\s*([kmg]i?)?\\s*$#i', $test, $matches)) {
throw new \InvalidArgumentException(\sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null'));
}
$target = $matches[2];
if (!is_numeric($target)) {
throw new \InvalidArgumentException(\sprintf('Invalid number "%s".', $target));
}
if (isset($matches[3])) {
// magnitude
switch (strtolower($matches[3])) {
case 'k':
$target *= 1000;
break;
case 'ki':
$target *= 1024;
break;
case 'm':
$target *= 1000000;
break;
case 'mi':
$target *= 1024 * 1024;
break;
case 'g':
$target *= 1000000000;
break;
case 'gi':
$target *= 1024 * 1024 * 1024;
break;
}
}
parent::__construct($target, $matches[1] ?: '==');
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
Comparator::$operator | private | property | ||
Comparator::getOperator | public | function | Gets the comparison operator. | |
Comparator::getTarget | public | function | Gets the target value. | |
Comparator::test | public | function | Tests against the target. | |
NumberComparator::__construct | public | function | Overrides Comparator::__construct |