定制 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.'
}

naotake51/evaluation 适用场景与选型建议

naotake51/evaluation 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2022 年 03 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 naotake51/evaluation 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 naotake51/evaluation 我们能提供哪些服务?
定制开发 / 二次开发

基于 naotake51/evaluation 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

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