avadim / math-executor
v1.2.1
2018-01-08 13:41 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ~5.0
README
具有自定义操作符、函数和变量的数学表达式计算器
此包不再支持!请使用 AceCalculator 代替! https://github.com/aVadim483/ace-calculator
通过 Composer 安装
|$ composer require avadim/math-executor
所有安装说明请见: https://packagist.org.cn/packages/avadim/math-executor
示例用法
require 'vendor/autoload.php'; $calculator = new \avadim\MathExecutor\MathExecutor(); print $calculator->execute('1 + 2 * (2 - (4+10))^2 + sin(10)'); // cascade execution - variable $_ has result of previous calculation print $calculator ->calc('4+10') ->calc('1 + 2 * (2 - $_)^2') ->calc('$_ + sin(10)') ->getResult();
默认操作符和函数
默认操作符: + - * / ^
默认函数
- sin
- cos
- tn
- asin
- acos
- atn
- min
- max
- avg
变量
默认变量
$pi = 3.14159265359
$e = 2.71828182846
您可以将自己的变量添加到执行器中
$calculator->setVars([ 'var1' => 0.15, 'var2' => 0.22 ]); $calculator->execute('$var1 + $var2');
额外操作符和函数
要加载额外操作符和函数,请使用方法 loadExtra()
$calculator->loadExtra();
额外操作符是布尔操作符: < <= > >= == !=
您可以使用布尔操作符与函数 if()
结合使用
print $calculator->execute('if(100+20+3 > 111, 23, 34)');
自定义函数
向执行器添加自定义函数
$calculator->addFunction('hypotenuse', function($a, $b) { return sqrt($a ** 2 + $b ** 2); }, 2); print $calculator->execute('hypotenuse(3,4)');
自定义操作符
向执行器添加自定义操作符
<?php use avadim\MathExecutor\Generic\AbstractToken; use avadim\MathExecutor\Generic\AbstractTokenOperator; use avadim\MathExecutor\Token\TokenScalarNumber; class TokenOperatorModulus extends AbstractTokenOperator { protected static $pattern = 'mod'; /** * Priority of this operator (1 equals "+" or "-", 2 equals "*" or "/", 3 equals "^") * @return int */ public function getPriority() { return 3; } /** * Association of this operator (self::LEFT_ASSOC or self::RIGHT_ASSOC) * @return string */ public function getAssociation() { return self::LEFT_ASSOC; } /** * Execution of this operator * @param AbstractToken[] $stack Stack of tokens * * @return TokenScalarNumber */ public function execute(&$stack) { $op2 = array_pop($stack); $op1 = array_pop($stack); $result = $op1->getValue() % $op2->getValue(); return new TokenScalarNumber($result); } }
并将其添加到执行器中
$calculator = new avadim\MathExecutor\MathExecutor(); $calculator->addOperator('mod', '\TokenOperatorModulus'); echo $calculator->execute('286 mod 100');
标识符的解释
标识符 - 以字母开头,由字母和数字的序列组成。您可以在计算中指定如何解释它们的规则
$calculator->setIdentifiers([ 'ONE' => 1, 'YEAR' => function($variables, $identifiers) { return date('Y'); }, ]); $calculator->execute('YEAR + ONE');