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

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.7,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

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

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

工作流

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

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

为了节省时间,ExpressionLanguage缓存ParsedExpression所以它可以跳过的标记和解析步骤重复表达。由一个缓存ParserCacheInterface实例(在默认情况下,它使用一个ArrayParserCache)。你可以通过创建一个定制的定制ParserCache使用构造函数注入的对象:

1 2 3 4 5
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;使用Acme\ExpressionLanguage\ParserCache\MyDatabaseParserCache;美元databaseParserCache=MyDatabaseParserCache (…);美元expressionLanguage=ExpressionLanguage (美元databaseParserCache);

请注意

DoctrineBridge提供了一个解析器使用的缓存实现教义缓存库各种各样的缓存,缓存策略,如Apc、文件系统和Memcached。

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

这两个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
使用ob娱乐下载\组件\ExpressionLanguage\SerializedParsedExpression;/ /……美元表达式=SerializedParsedExpression (“1 + 4”序列化(美元expressionLanguage- >解析(“1 + 4”,数组())- >getNodes ()));var_dump (美元expressionLanguage- >评估(美元表达式));/ /打印5
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。