Configuration

Arokettu\ArithmeticParser\Config class is used to configure the calculator and the parser.

Config is mutable but it is cloned internally when passed to prevent external alterations.

Config::default()

The default preset used when no config is specified.

Functions

Added in version 1.1: removeFunction() and clearFunctions()

Changed in version 2.0: Functions can accept any number of arguments

Added in version 2.0: pi(), e(), if()

Changed in version 2.0: log() now also has base optional param

The function must be a callable that accepts float arguments.

Default functions: abs, exp, log(num, base = e()), log10, sqrt, acos, asin, atan, cos, sin, tan, acosh, asinh, atanh, cosh, sinh, tanh, ceil, floor, round, deg2rad, rad2deg, pi, e, if(if, then, else).

Note

if() is a regular function and therefore is not lazy. For example, if (a = 0, 0, 1/a) will result in division by zero if a = 0.

You can:

  • Replace functions with your own list:

    <?php
    $config->setFunctions(myfunc2: fn ($a) => a ** 2);
    
  • Add new functions:

    <?php
    $config->addFunctions(myfunc3: fn ($a) => a ** 3);
    
  • Remove functions:

    <?php
    $config->removeFunctions('acos', 'asin');
    $config->removeFunction('acos'); // semantic alias for removeFunctions('acos')
    $config->clearFunctions(); // remove all functions
    

Operators

Added in version 1.1: removeOperator() and clearOperators()

Added in version 2.0: <, >, <=, >=, =, ==, <>, !=, and, AND, or, OR

Operators can be unary and binary. Operator symbol can be any string without digits. Be wary when using latin character based operators, they are case-sensitive and may shadow variables and functions.

Default operators:

  • +, - in both unary and binary form. They are built-in and are not configurable.

  • *, /, <, >, <=, >=, = (also ==), <> (also !=), and (also AND), or (also OR).

You can:

  • Replace operators with your own list:

    <?php
    $config->setOperators(
        new BinaryOperator('×', fn ($a, $b) => $a * $b, BinaryOperator::PRIORITY_MUL),
        new BinaryOperator('÷', fn ($a, $b) => $a / $b, BinaryOperator::PRIORITY_MUL),
    );
    
  • Add new operators:

    <?php
    // assuming you have factorial() defined
    $config->addOperators(
        new BinaryOperator('^', pow(...), BinaryOperator::PRIORITY_POW, BinaryAssoc::RIGHT),
        new UnaryOperator('!', factorial(...), UnaryPos::POSTFIX),
    );
    
  • Remove operators:

    <?php
    // remove any custom or built-in operators except for + and -
    $config->removeOperators('*', '/');
    // you cannot divide by zero if you cannot divide
    $config->removeOperator('/'); // semantic alias for removeOperators('/')
    // leave only + and -
    $config->clearOperators(); // + and - are handled specially and can't be removed