定制 naotake51/evaluation 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

naotake51/evaluation

Composer 安装命令:

composer require naotake51/evaluation

包简介

README 文档

README

naotake51/evaluation is a Composer package for creating a simple expression evaluation module. It allows you to register your own functions to evaluate expressions (strings).

Using

use Naotake51\Evaluation\Evaluation;

$evaluation = new Evaluation([
    'square' => function (array $arguments) {
        return $arguments[0] * $arguments[0];
    }
]);
$result = $evaluation('square(2) + square(2)'); // => 8

Literal

type example
int 123
float 0.5 .5
boolean True true TRUE False false FALSE
string "aaa" 'aaa' 'aa\'aa\\aa'
array [1, 2, [3, 4]]
object {'a': 1, 'b': {'c': 2}}

Operators and precedence

Operator example
! !true
* / % 5 * 2
+ - 5 + 2
== != === !== 1 === 1
&& true && false
|| true || false

Magic function

identifier description
__add Override the binary operator '+'.
__sub Override the binary operator '-'.
__mul Override the binary operator '*'.
__div Override the binary operator '/'.
__mod Override the binary operator '%'.
__or Override the binary operator '||'.
__and Override the binary operator '&&'.
__equal Override the binary operator '=='.
__not_equal Override the binary operator '!='.
__equal_strict Override the binary operator '==='.
__not_equal_strict Override the binary operator '!=='.
__not Override the unary operator '!'.
$evaluation = new Evaluation([
    '__add' => function (array $arguments) {
        return "$arguments[0] + $arguments[1]";
    }
]);
$result = $evaluation('1 + 2'); // => '1 + 2'
$evaluation = new Evaluation([
    '*' => function (string $identify, array $arguments) {
        return 'call' . $identify . '(' . implode(', ', $arguments). ')';
    }
]);
$result = $evaluation('hoge(1, 2)'); // => 'call hoge(1, 2)'

Parameter check

By passing an array, you can define the type of the argument. It is also possible to express OR by separating with '|'.

definition description
numeric Check with 'is_numeric'.
integer Check with 'is_integer'.
float Check with 'is_float'.
string Check with 'is_string'.
bool Check with 'is_bool'.
array Check with 'is_array'.
object Check with 'is_object'.
null Check with 'is_null'.
mixed All types are allowed.
$evaluation = new Evaluation([
    'repeat' => [
        'string, integer|null' => function (string $str, ?int $repeat) {
            return str_repeat($str, $repeat ?? 2);
        },
    ]
]);
$result = $evaluation("repeat('abc', 3)"); // => 'abcabcabc'

Overload

Multiple patterns can be overloaded by registering them.

$evaluation = new Evaluation([
    '__add' => [
        'string, string' => function (string $a, string $b) {
            return $a . $b;
        },
        'numeric, numeric' => function ($a, $b) {
            return $a + $b;
        },
    ]
]);
$result = $evaluation("'abc' + 'def'"); // => 'abcdef'

Run-time error

class description
Errors\EvaluationError Base class for errors that occur during evaluation.
Errors\SyntaxError syntactic error.
Errors\UndefineFunctionError Calling an undefined function.
Errors\ArgumentError Error in parameter check.
use Naotake51\Evaluation\Evaluation;
use Naotake51\Evaluation\Errors\EvaluationError;

try {
    $evaluation = new Evaluation([
        'hoge' => function (array $arguments) {
            return 'hoge';
        },
    ]);
    $result = $evaluation("fuga()"); // => UndefineFunctionError
} catch (EvaluationError $e) {
    error_log($e->getMessage()); // => 'function fuga is not exists.'
}

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-03-01

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固