使用解析器缓存缓存表达式
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
使用解析器缓存缓存表达式
ExpressionLanguage组件已经提供了编译()方法能够在纯PHP缓存表达式。但在内部,组件还缓存解析表达式,所以复制表达式可以被编译/评估更快。
工作流
这两个evaluate ()和编译()
前需要做的一些事情可以提供返回值。为evaluate ()
,这个开销更大。
这两种方法都需要标记和解析表达式。这是做的parse ()方法。它返回一个ParsedExpression。现在,编译()
方法只是返回该对象的字符串转换。的evaluate ()
方法需要遍历表达式的“节点”(部分保存在ParsedExpression
)和评估他们。
为了节省时间,ExpressionLanguage
缓存ParsedExpression
所以它可以跳过的标记和解析步骤重复表达。缓存是通过PSR-6CacheItemPoolInterface实例(在默认情况下,它使用一个ArrayAdapter)。您可以通过创建一个自定义定制这个缓存池或使用一个可用的和注射使用构造函数:
1 2 3 4 5
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;使用ob娱乐下载\组件\缓存\适配器\RedisAdapter;美元缓存=新RedisAdapter (…);美元expressionLanguage=新ExpressionLanguage (美元缓存);
另请参阅
看到缓存组件欧宝官网下载app文档了解更多信息可用缓存适配器。
使用解析和序列化的表达式
这两个evaluate ()
和编译()
可以处理ParsedExpression
和SerializedParsedExpression
:
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许可证。