SuperNumber is a number objectifier. Its purpose is to keep simple math OOP friendly. If you're looking for a way to clean up your views, this will do the job.
To use it, you can use it via composer:
composer require degecko/super-number
Then, simply initialize it on any number:
$number = new DeGecko\SuperNumber(100);
If you need to initialize it multiple times, I recommend creating a helper, like the following:
function number ($n) {
return new DeGecko\SuperNumber($n);
}
add()
/plus()
to perform additionsubtract()
/sub()
/minus()
to perform subtractionmultiply()
/times()
to perform multiplicationdivide()
/over()
to perform division
All of the above support 2 parameters. The first is the value that you want to use with the current number, and the second parametere specifies if that value should be treated as a percentage.
E.g.
number(50)->add(10); // Returns 60
number(50)->add(10, true); // Returns 55, because 50 + 10% of 50 = 55
Of course, you can chain them together:
number(10)->add(3)->divide(2); // Returns 6.5
Apart from those, there are other basic methods:
increment()
/decrement()
which are aliases ofadd(1)
andsubtract(1)
. You can specify a different value by passing it as the first parameter.power()
/pow()
to raise to a powermodulo()
/mod()
to perform modulo
E.g.
number(5)->increment(); // Returns 6
number(5)->decrement(2); // Returns 3
number(10)->increment(10, true); // Returns 11, because 10% of 10 is 1, and 10 + 1 = 11
number(2)->power(3); // Returns 8
number(10)->mod(5); // Returns 0
percentageOf()
/percentOf()
computes the percentage of the current number from the given value.percentageFrom()
/percentFrom()
computes what percentage of the given number represents the current number.
E.g.
number(40)->percentOf(200); // Returns 20, because 40 is 20% of 200.
number(40)->percentFrom(200); // Returns 80, because 40% of 200 is 80.
mutate(callable $fn)
will let you alter the currently stored number any way you want, by passing it a callable function. The first parameter of the function is the current $value. Whatever you return, will become the new number.
Warning! This does not validate your new value to be numeric.
E.g.
number(3.1)->mutate(function ($value) {
return (int) $value;
}); // Returns 3
The magic method __toString() will return (string) $this->number;
, so there's no need to call another method to get the output of a current SuperNumber object. However, there are additional methods to get the output, if required.
get()
which returns the current number, uncasted.printf($pattern, ...$arguments)
which allows you to use sprintf() on the current number. It automatically adds the second sprintf parameter to be the current value.format($decimals = 0, $decPoint = '.', $thousandsSep = ',')
which is an alias of number_format. It supports the same parameters as number_format.
number(10)->printf('%d'); // Returns 10
number(10)->printf('$%.2f'); // Returns $10.00
number(1000)->format(); // Returns 1,000
number(1000)->format(2); // Returns 1,000.00
number(1000)->format(2, '_'); // Returns 1,000_00
number(1000)->format(2, '_', '-'); // Returns 1-000_00
toInt()
will cast the current value to an integertoFloat()
will cast the current value to a float
isOdd()
checks if the integer version of the current number is odd.isEven()
checks if the integer version of the current number is even.eq()
/equal()
/equals()
checks if the current value is equal to the provided value.lt()
/lessThan()
checks if the current value is less than the provided value.lte()
/lessThanOrEqual()
checks if the current value is less than or equal to the provided value.gt()
/greaterThan()
checks if the current value is greater than the provided value.gte()
/greaterThanOrEqual()
checks if the current value is greater than or equal to the provided value.
And, also all of the PHP math functions are supported and can be chained together:
abs()
acos()
acosh()
asin()
asinh()
atan()
atanh()
ceil()
cos()
cosh()
deg2rad()
exp()
expm1()
floor()
fmod()
log10()
log1p()
log()
min()
max()
rad2deg()
round()
sin()
sinh()
sqrt()
tan()
tanh()
base_convert()
bindec()
decbin()
dechex()
decoct()
hexdec()
octdec()
pow()
E.g.
number(-9)->abs()->pow(2); // Returns 81
You can find those defined in the official PHP documentation.
Cosmin Gheorghita (degecko.com)