ExpressionLanguage组件

ExpressionLanguage组件

ExpressionLanguage组件提供了一个可以编译和计算表达式的引擎。表达式是返回值(主要是布尔值,但不限于)的一行程序。

安装

1
作曲家需要symfony /表达式欧宝娱乐app下载地址语言

请注意

如果在Symfony应用程序之外安装此组件,则必须使用欧宝娱乐app下载地址供应商/ autoload.php以启用Composer提供的类自动加载机制。读这篇文章为更多的细节。

表达式引擎如何帮助我?

组件的目的是允许用户在配置中使用表达式来实现更复杂的逻辑。在一些例子中,Symfony框架在安全性、验证欧宝娱乐app下载地址规则和路由匹配方面使用表达式。

除了使用框架本身中的组件外,表达式组件是一个完美的候选者业务规则引擎.这个想法是让网站管理员在不使用PHP和不引入安全问题的情况下,以动态的方式配置东西:

1 2 3 4 5 6 7 8
#获取['good_customers','collaborator']#indemage.commercount> 100和文章中的文章,获取特价.stock <15.

表达式可以被视为非常受限制的PHP沙箱,并且由于必须明确声明表达式中可用的变量来免受外部注射的免疫。

使用

ExpressionLanguage组件可以编译表达式并求值。表达式是通常返回布尔值的一行程序,可由在如果声明。表达式的一个简单例子是1+2.您还可以使用更复杂的表达式,例如someArray [3] .someMethod(酒吧)

组件提供了2种使用表达式的方法:

  • 评价:表达式不被编译到PHP;
  • 编译:该表达式被编译为PHP,所以它可以被缓存和计算。

组件的主类是欧宝娱乐app下载地址Symfony \ \ ExpressionLanguage \ ExpressionLanguage组件

使用欧宝娱乐app下载地址Symfony \ \ ExpressionLanguage \ ExpressionLanguage组件expressionLanguage美元ExpressionLanguage();var_dumpexpressionLanguage美元->评估“1 + 2”));/ /显示3var_dumpexpressionLanguage美元->编译“1 + 2”));//显示(1 + 2)

表达式语法

看到表达式语法来学习ExpressionLanguage组件的语法。

传递变量

您还可以将变量传递到表达式中,该表达式可以是任何有效的PHP类型(包括对象):

使用欧宝娱乐app下载地址Symfony \ \ ExpressionLanguage \ ExpressionLanguage组件expressionLanguage美元ExpressionLanguage();苹果上市美元的品种美元的苹果苹果();美元的苹果->各种“密脆”var_dumpexpressionLanguage美元->评估“fruit.variety”“水果”=>美元的苹果));/ /显示“密脆”

有关更多信息,请参见表达式语法条目,尤其是处理对象使用数组

谨慎

在表达式中使用变量时,避免将不受信任的数据传递到变量数组中。如果无法避免这一点,请清除不可信数据中的非字母数字字符,以防止恶意用户注入控制字符并更改表达式。

缓存

组件提供了一些不同的缓存策略,请阅读更多相关内容使用解析器缓存缓存表达式

AST转储和编辑

AST (抽象语法树)的表达式可以被转储和操作倾倒和操纵表达式的AST

这项工作,包括代码样本,是在一个创作共用BY-SA 3.0许可证。