承接 jamesgerat/exprlib 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

jamesgerat/exprlib

Composer 安装命令:

composer require jamesgerat/exprlib

包简介

An expression parser in PHP

README 文档

README

Build Status

For migration from thesoftwarefarm/exprlib and another fork need:

  • replace var format from "{{a}}" to "[a]"
  • up php to 7.3

An expression parser in PHP, code inspired from codehackit

An alternative to this is Hoa/Math

List of functions and features:

  • operators = * + - ^ !=
  • acos
  • cos
  • sin
  • tan
  • round
  • pow
  • sqrt
  • log
  • exp
  • sum
  • avg
  • min
  • max
  • if (condition, than, else)
  • var placing with [varName]

Examples:

<?php
// simple math
exprlib\Parser::build('2+1')->evaluate(); // 3
exprlib\Parser::build('2/1')->evaluate(); // 2
exprlib\Parser::build('2/(3.6*8.5)')->evaluate(); // 0.06536
exprlib\Parser::build('2+(6/2)+(8*3)')->evaluate(); // 29
exprlib\Parser::build('2+3+6+6/2+3')->evaluate(); // 17
exprlib\Parser::build('0.001 + 0.02')->evaluate(); // 0.021
exprlib\Parser::build("100 - 80 - 90 + 100")->evaluate();//30

// functions
exprlib\Parser::build('COS(0)')->evaluate(); // 1
exprlib\Parser::build('cos(90)')->evaluate(); // 0
exprlib\Parser::build('cos(180)')->evaluate(); // -1
exprlib\Parser::build('cos(360)')->evaluate(); // 1
exprlib\Parser::build('sin(0)')->evaluate(); // 0
exprlib\Parser::build('sin(90)')->evaluate(); // 1
exprlib\Parser::build('sin(180)')->evaluate(); // 0
exprlib\Parser::build('sqrt(9)')->evaluate(); // 3
exprlib\Parser::build('sqrt(4)')->evaluate(); // 2
exprlib\Parser::build('sqrt(3)')->evaluate(); // 1.73205
exprlib\Parser::build('tan(180)')->evaluate(); // 0
exprlib\Parser::build('log(10)')->evaluate(); // '1'
exprlib\Parser::build('log(10,10)')->evaluate(); // '1'
exprlib\Parser::build('ln(10)')->evaluate(); // '2.30259'
exprlib\Parser::build('log(0.7)')->evaluate(); // '-0.1549'
exprlib\Parser::build('ln(0.7)')->evaluate(); // '-0.35667'
exprlib\Parser::build('pow(10, 2)')->evaluate(); // 100
exprlib\Parser::build('pow(10, 3)')->evaluate(); // 1000
exprlib\Parser::build('pow(10, 0)')->evaluate(); // 1
exprlib\Parser::build('exp(12)')->evaluate(); // 162754.79142
exprlib\Parser::build('exp(5.7)')->evaluate(); // 298.8674
exprlib\Parser::build('sum(10, 20, 30)')->evaluate(); // 60
exprlib\Parser::build('avg(10, 20, 30)')->evaluate(); // 20
exprlib\Parser::build('log(0)')->evaluate(); // -INF
exprlib\Parser::build('log(0)*-1')->evaluate(); // INF
exprlib\Parser::build(sprintf('acos(%s)', rad2deg(8)))->evaluate(); // NAN
exprlib\Parser::build('round(2.555,0)')->evaluate(); // 3
exprlib\Parser::build('round(2.555,1)')->evaluate(); // 2.6
exprlib\Parser::build('round(222.555,-1)')->evaluate(); // 220
exprlib\Parser::build('round(225.555,-1)')->evaluate(); // 230

// min-max
exprlib\Parser::build('max(10,20,30)')->evaluate(); // 30
exprlib\Parser::build('min(10,20,30)')->evaluate(); // 10

// if-elsing
exprlib\Parser::build('if(1=1, 1, 0)')->evaluate(); // 1
exprlib\Parser::build('if(1<2, 1, 0)')->evaluate(); // 0
exprlib\Parser::build('if(1>2, 1, 0)')->evaluate(); // 0

// var placing
exprlib\Parser::build('[a]+1')->setVars(['a' => 3])->evaluate(); // 4
exprlib\Parser::build('[a]-[b]')->setVars(['a' => 2, 'b' => 5])->evaluate(); // -3

// var placing with if-elsing
exprlib\Parser::build('if([a]=5, 1, 0)')->setVars(['a' => 5])->evaluate(); // 1
exprlib\Parser::build('if([a]>[b], 1, 0)')->setVars(['a' => 3, 'b' => 2])->evaluate(); // 1

Launch tests

Look at .travis.yml

Todo

  • Look at how is the best way to decouple Scope
  • Add tests

jamesgerat/exprlib 适用场景与选型建议

jamesgerat/exprlib 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.75k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 08 月 19 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「math」 「expressions」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

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

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

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-08-19