IntObject

  • Primitive Type: int, integer

Usage

Provides an interface for a lot of internal operations and functions on integers.

Example

use Typing\Type\IntObject;
use Exception;


$float = new IntObject(4.5);
if (8.0 !== $float->plus(3.5)->getScalarValue()) {
    throw new Exception('Bad math!');
}

Extensions

This section is optional.

If you don't care about customizing the extensions, simply go on to the methods section.

By default, the order of extension loading is as follows:

    /**
     * @return MathLibraryInterface[]
     */
    protected function getDefaultDelegates(): array
    {
        //Array is sorted in order of preference. Override in child class if so desired.
        return [
            'bcmath' => new BcMath($this->getRoundingStrategy()),
            'gmp' => new Gmp(),
            'spl' => new Spl($this->getRoundingStrategy()),
        ];
    }

You do not need to actually have any of these extensions installed. If one fails, or is not enabled,it will simply go to the next, behaving like a chain, until it finds a library that can perform the operation.

If you want to only use specific libraries when using NumberTypes (Float | Int), then you need to pass it an instance of a MathAdapter that only contains those libraries.

use Typing\Math\DefaultMathAdapter;
use Typing\Math\Library\BcMath;
use Typing\Math\Library\MathLibraryInterface;
use Typing\Math\Library\Spl;
use Typing\Type\Collection;

$libraries = new Collection(array: [
    new BcMath(),
    new Spl(),
], type: MathLibraryInterface::class);

$adapter = new DefaultMathAdapter(delegates: $libraries)

$float = new IntObject(float: 5.0, adapter: $adapter);

I am working on implementing a symfony bundle, so the library can be customized without so much verbosity.

For other frameworks, PRs are welcome!

BCMath

Make sure the BCMath extension (often php-bcmath) is installed and enabled if you'd like IntObjects to use this library when performing arithmetic.

Some methods are decorated instead of direct proxies to the library for compatibility purposes.

Gmp

Make sure the GMP extension (often php-gmp) is installed and enabled if you'd like IntObjects to use this library when performing arithmetic.

Some methods are decorated instead of direct proxies to the library for compatibility purposes.

Spl

This is just standard php arithmetic without any special operations.

Methods

Instance


plus

Adds a number to the current instance.

plus(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(3.0);
assert(6.2 == $float->plus(3.2)->getScalarValue()); // true

minus

Subtracts a number from the current instance.

minus(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(7.0);
assert(2.8 == $float->minus(4.2)->getScalarValue()); // true

multipliedBy

Multiplies the current instance by a number.

multipliedBy(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(2.0);
assert(20.0 == $float->multipliedBy(10)->getScalarValue()); // true

dividedBy

Divides the current instance by a number.

dividedBy(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(10.0);
assert(2.0 == $float->dividedBy(5)->getScalarValue()); // true

compare

Compares the current instance to the param passed. Same rules as spaceship <=> or version_compare for return values.

compare(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(10.0);
assert(1 == $float->compare(5)->getScalarValue()); // true

modulo

Returns the remainder of the instance divided by the param.

modulo(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(55.3);
assert(5.3 == $float->modulo(10)->getScalarValue()); // true
$float = new IntObject(10.0);
assert (0 == $float->modulo(2)->getScalarValue()); // true

power

Returns instance to the power of param.

power(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(10);
assert(31622776.6 == $float->power(7.5)->getScalarValue()); // true

squareRoot

Returns the instance's square root.

squareRoot(): NumberObjectInterface;

Usage:

$float = new IntObject(10);
assert(31622776.6 == $float->power(7.5)->getScalarValue()); // true

absolute

Returns the instance's absolute value.

absolute(): NumberObjectInterface;

Usage:

$float = new IntObject(-15.5);
assert(15.5 == $float->absolute()->getScalarValue()); // true

negate

Returns the instance's opposite value.

negate(): NumberObjectInterface;

Usage:

$float = new IntObject(-15.5);
assert(15.5 == $float->negate()->getScalarValue()); // true

$float = new IntObject(77.5);
assert(-77.5 == $float->negate()->getScalarValue()); // true

factorial

Returns the factorial value for instance. Arguments must be whole, positive numbers.

factorial(): NumberObjectInterface;

Usage:

$float = new IntObject(10.0);
assert(3628800 == $float->factorial()->getScalarValue()); // true

$float = new IntObject(10.1);
$float->factorial(); // InvalidNumberException

$float = new IntObject(-10.0);
$float->factorial(); // InvalidNumberException

gcd

Returns the greatest common divider between the current instance and argument.

gcd(StringObject | NumberObjectInterface | string | float | int $num): NumberObjectInterface;

Usage:

$float = new IntObject(50.0);
assert(10 == $float->gcd(10)->getScalarValue()); // true

root

Extension Required

php-gmp must be installed for this method to work.

Takes the nth root of the current instance and returns the integer component of the result.

root(int $num): NumberObjectInterface

Usage:

$float = new IntObject(50.0);
assert(10 == $float->gcd(10)->getScalarValue()); // true

getNextPrime

Return the next prime number after current instance's value.

getNextPrime(): NumberObjectInterface;

Usage:

$float = new IntObject(5.0);
assert(7 == $float->getNextPrime()->getScalarValue()); // true

isPrime

Returns true if the current instance is a prime number.

isPrime(): bool;

Usage:

$float = new IntObject(5.0);
assert($float->isPrime()); // true

$float = new IntObject(6.0);
assert($float->isPrime()); // false

isPerfectSquare

Returns true if the current instance is a perfect square.

isPerfectSquare(): bool;

Usage:

$float = new IntObject(4.0);
assert($float->isPerfectSquare()); // true

$float = new IntObject(6.0);
assert($float->isPerfectSquare()); // false

$float = new IntObject(9.0);
assert($float->isPerfectSquare()); // true

getPrecision

Gets the current precision. If null was passed, then it calculates the precision.

getPrecision(): int;

Usage:

$float = new IntObject(4.0);
assert(1 === $float->getPrecision()); // true

$float = new IntObject(6.038);
assert(3 === $float->getPrecision()); // false

$float = new IntObject(9.0);
assert($float->isPerfectSquare()); // true

toIntObject

Converts the current instance to an IntObject.

toIntObject(): IntObject;

Usage:

$float = new IntObject(4.05);
assert(new IntObject(4) == $float->toIntObject()); // true

toInt

Converts the current instance to a primitive int.

toInt(): int;

Usage:

$float = new IntObject(4.04);
assert(4 === $float->toInt()); // true

toStringObject

Converts the current instance to a StringObject.

toStringObject(): StringObject;

Usage:

$float = new IntObject(4.05);
assert(new StringObject('4.05') == $float->toStringObject()); // true

toString

Converts the current instance to a primitive string.

toString(): string;

Usage:

$float = new IntObject(4.04);
assert('4.04' === $float->toString()); // true

Static


box

Boxes a given variable to IntObject instances.

::box(mixed &$pointer)

Usage:

$float = new IntObject(4.04);
IntObject::box($float);
$float = 7.77;
assert($float instanceof IntObject); // true
$float = false; // TypeError

fromPrimitive

Attempts to create a IntObject from a primitive value. Throws error if non_numeric passed.

::fromPrimitive(mixed $mixed, ?int $precision = null): IntObject

Usage:

$float = IntObject::fromPrimitive('4.04');
assert($float instanceof IntObject); // true

$float = IntObject::fromPrimitive(false); // TypeError