使用解析器缓存缓存表达式

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.1,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

使用解析器缓存缓存表达式

ExpressionLanguage组件已经提供了编译()方法能够在纯PHP缓存表达式。但在内部,组件还缓存解析表达式,所以复制表达式可以被编译/评估更快。

工作流

这两个evaluate ()编译()前需要做的一些事情可以提供返回值。为evaluate (),这个开销更大。

这两种方法都需要标记和解析表达式。这是做的parse ()方法。它返回一个ParsedExpression。现在,编译()方法只是返回该对象的字符串转换。的evaluate ()方法需要遍历表达式的“节点”(部分保存在ParsedExpression)和评估他们。

为了节省时间,ExpressionLanguage缓存ParsedExpression所以它可以跳过的标记和解析步骤重复表达。缓存是通过PSR-6CacheItemPoolInterface实例(在默认情况下,它使用一个ArrayAdapter)。您可以通过创建一个自定义定制这个缓存池或使用一个可用的和注射使用构造函数:

1 2 3 4 5
使用欧宝娱乐app下载地址\组件\ExpressionLanguage\ExpressionLanguage;使用欧宝娱乐app下载地址\组件\缓存\适配器\RedisAdapter;美元缓存=RedisAdapter (…);美元expressionLanguage=ExpressionLanguage (美元缓存);

另请参阅

看到缓存组件欧宝体育电话文档了解更多信息可用缓存适配器。

使用解析和序列化的表达式

这两个evaluate ()编译()可以处理ParsedExpressionSerializedParsedExpression:

1 2 3 4 5 6
/ /……/ /解析()方法返回一个ParsedExpression美元表达式=美元expressionLanguage- >解析(“1 + 4”[]);var_dump (美元expressionLanguage- >评估(美元表达式));/ /打印5
1 2 3 4 5 6 7 8 9
使用欧宝娱乐app下载地址\组件\ExpressionLanguage\SerializedParsedExpression;/ /……美元表达式=SerializedParsedExpression (“1 + 4”序列化(美元expressionLanguage- >解析(“1 + 4”[])- >getNodes ()));var_dump (美元expressionLanguage- >评估(美元表达式));/ /打印5
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。