Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有PHP和JavaScript绑定的可移植表达式语言?_Javascript_Php_Dsl - Fatal编程技术网

带有PHP和JavaScript绑定的可移植表达式语言?

带有PHP和JavaScript绑定的可移植表达式语言?,javascript,php,dsl,Javascript,Php,Dsl,我使用的web应用程序使用服务器端PHP和客户端Javascript的大量混合,我希望管理员能够配置一些基本条件。例如,我们可能有一个数据模型,其中包含: var person = { name: 'Alice', age: 33, favorite_color: 'purple', address: {street: '123 Some St', state: 'NY'} }; 管理员可能希望根据条件隐藏字段或触发操作,如: ((person.age > 20) or

我使用的web应用程序使用服务器端PHP和客户端Javascript的大量混合,我希望管理员能够配置一些基本条件。例如,我们可能有一个数据模型,其中包含:

var person = {
  name: 'Alice',
  age: 33,
  favorite_color: 'purple',
  address: {street: '123 Some St', state: 'NY'}
};
管理员可能希望根据条件隐藏字段或触发操作,如:

((person.age > 20) or (person.favorite_color == 'red')) and (person.address.state == 'NY')
理想情况下,我们可以在不同的上下文中使用相同的条件,例如客户端验证和服务器端验证

如果应用程序只是服务器端PHP,或者是全栈JS,那么可以使用PHP
eval()
或JS
eval()
。但对于涉及多种语言的应用程序,这是行不通的。似乎需要创建一个小型DSL,其中包含针对不同平台的实现,例如

// JS
var condition = "(person.age > 20) or (person.favorite_color == 'red')";
var isMatch = ExpressionLanguage.eval(condition, {
  person: {...}
})

// PHP
$condition = "(person.age > 20) or (person.favorite_color == 'red')";
$isMatch = ExpressionLanguage::eval($condition, array(
  'person' => array(...),
));

我遇到过,它采用了类似的可移植方法来模板化。然而,它的设计是明确的“无逻辑”,不支持条件。尽管如此,这似乎是一个相当普遍的问题。其他人是如何满足可移植条件的需求的?

注意,表达式语言也比JS/PHP
eval()更安全,因为它不允许任意代码执行。。。。它甚至不是图灵完全。是一副超级胡子,对你有用吗?我在PHP/Javascript项目中使用它,对此我非常满意。哦,这是个好主意。不幸的是,一些快速搜索表明它不支持通用的条件符号:可能没有答案。。。开始考虑自己怎么做。。。