karboosx / procer
编写业务逻辑的自定义语言
Requires
- php: >=8.2
- ext-ctype: *
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Procer
Procer是一种简单轻量级语言,旨在以自然和易于阅读的方式描述流程和工作流。Procer的主要优势在于其功能可以暂停代码执行并等待信号以继续执行。
示例代码
let shopping_cart be new_shopping_cart(user_account).
let item be product_from_store("apple").
add(item) on shopping_cart.
on user_account do checkout.
此示例代码中的每个函数调用
(new_shopping_cart
、product_from_store
、add
、checkout
)实际上都是PHP世界中的一个函数。在这里,你只需编写业务逻辑,实现将由PHP完成。
查看Procer语法以获取更多信息。
安装
您可以使用composer安装Procer
composer require karboosx/procer
用法
use Karboosx\Procer; $procer = new Karboosx\Procer(); $result = $procer->run('let a be 1.'); echo $result->get('a'); // 1
使用自定义函数
为了在Procer中使用自定义函数,您需要创建一个实现了FunctionProviderInterface
接口的类,并将此类的实例传递给Karboosx\Procer
构造函数。
use Karboosx\Procer; $procer = new Karboosx\Procer([ new CustomFunctionProvider() ]); $result = $procer->run('let x be custom_function("hello world!").'); echo $result->get('x'); // "custom function result with argument: hello world!"
CustomFunctionProvider
类应如下所示
class CustomFunctionProvider implements \Karboosx\Procer\FunctionProviderInterface { public function custom_function(Context $context, array $arguments): string { return "custom function result with argument: {$arguments[0]}"; } public function supports(string $functionName): bool { return in_array($functionName, ['custom_function']); } }
注意:
supports
方法应返回true
,如果提供者支持该函数,否则返回false
。
注意:
custom_function
方法应将Context
对象作为第一个参数,将参数数组作为第二个参数。
Context
对象包含在Procer代码中定义的变量。
查看自定义函数文档以获取更多信息。
评估表达式
如果您只想评估一个表达式,可以使用Karboosx\Procer
类的runExpression
方法。
use Karboosx\Procer; $procer = new Procer(); $result = $procer->runExpression('1 + 2 * 3'); echo $result; // 7
查看表达式文档以获取更多信息。
暂停和恢复执行
您可以通过resume
方法暂停Procer代码的执行并在以后恢复。
停止执行的好方法是使用等待信号
语句。
use Karboosx\Procer; $procer = new Procer(); $result = $procer->run(<<<CODE let a be 1. wait for signal test_signal. let a be 2. CODE); echo $result->get('a'); // 1 $result = $procer->resume($context, [], ['test_signal']); echo $result->get('a'); // 2
这样,您可以在脚本的一个点上暂停执行。等待用户输入或某些事件发生,然后恢复脚本执行。
查看信号文档以获取更多信息。
此外,查看序列化文档以获取有关如何序列化和反序列化脚本的更多信息。
文档
用户提交代码的安全性
只要提供的函数是安全的,用户提交的代码就安全运行。
Procer不允许运行任何PHP代码(除了提供的函数),不允许包含文件、写入文件、从文件读取、创建对象、使用eval或访问全局变量。
许可
此项目是开源软件,许可协议为MIT许可证。请参阅许可文件以获取更多信息。