表达语言组件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
表达语言组件
ExpressionLanguage组件提供了一个可以编译和计算表达式的引擎。表达式是返回值的一行代码(主要是布尔值,但不限于此)。
安装
1
$作曲家需要交响乐/表达语言ob娱乐下载
请注意
如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php
文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。
表达式引擎如何帮助我?
该组件的目的是允许用户在配置中使用表达式来处理更复杂的逻辑。例如,Symfony框架在安全性、验证规则和路ob娱乐下载由匹配中使用了表达式。
除了在框架本身中使用该组件外,ExpressionLanguage组件是一个完美的候选组件业务规则引擎.这个想法是让网站管理员在不使用PHP和不引入安全问题的情况下,以动态的方式配置内容:
1 2 3 4 5 6 7 8
#当article. commentcount > 100和article. getgroup()在['good_customers', 'collaborator']中获得特价类别不在["misc"] #当product.stock . #
表达式可以被视为一个非常受限的PHP沙盒,不受外部注入的影响,因为必须显式地声明表达式中哪些变量可用。
使用
ExpressionLanguage组件可以编译和求值表达式。表达式是一行程序,通常返回布尔值,可由在类中执行表达式的代码使用如果
声明。表达式的一个简单例子是1 + 2
.您还可以使用更复杂的表达式,例如someArray [3] .someMethod(酒吧)
.
该组件提供了两种处理表达式的方法:
- 评价:表达式被求值而不被编译成PHP;
- 编译:表达式被编译成PHP,因此它可以被缓存和求值。
组件的主类是ExpressionLanguage:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;$expressionLanguage=新ExpressionLanguage ();var_dump ($expressionLanguage->评估(“1 + 2”));//显示3var_dump ($expressionLanguage->编译(“1 + 2”));//显示(1 + 2)
传入变量
你也可以将变量传递到表达式中,它可以是任何有效的PHP类型(包括对象):
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;$expressionLanguage=新ExpressionLanguage ();类苹果{公共$各种;}$苹果=新苹果();$苹果->各种=“密脆”;var_dump ($expressionLanguage->评估(“fruit.variety”, (“水果”= >$苹果,]));//显示"Honeycrisp"
有关更多信息,请参见表达式语法条目,尤其是表达式语法而且表达式语法.
谨慎
在表达式中使用变量时,避免将不可信的数据传递到变量数组中。如果无法避免这种情况,请清除不受信任数据中的非字母数字字符,以防止恶意用户注入控制字符并更改表达式。
缓存
该组件提供了一些不同的缓存策略,请在使用解析器缓存缓存表达式.
AST转储和编辑
AST (抽象语法树)的表达式可以转储和操作,如转储和操作表达式的AST.