使用解析器缓存缓存表达式
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.6,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
使用解析器缓存缓存表达式
ExpressionLanguage组件已经提供了一个编译()方法,以便能够在纯PHP中缓存表达式。但是在内部,组件还缓存解析过的表达式,因此可以更快地编译/求值重复的表达式。
工作流
这两个evaluate ()而且编译()
需要做一些事情才能提供各自的返回值。为evaluate ()
,这个开销更大。
这两种方法都需要对表达式进行标记化和解析。这是由parse ()方法。它返回一个ParsedExpression.现在,编译()
方法只返回此对象的字符串转换。的evaluate ()
方法需要遍历“节点”(保存在ParsedExpression
),并对他们进行评估。
为了节省时间ExpressionLanguage
缓存ParsedExpression
因此它可以跳过带有重复表达式的标记化和解析步骤。缓存是由ParserCacheInterface实例(默认情况下,它使用ArrayParserCache).您可以通过创建一个自定义来定制它ParserCache
并使用构造函数将this注入到对象中:
1 2 3 4 5
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;使用Acme\ExpressionLanguage\ParserCache\MyDatabaseParserCache;$缓存=新MyDatabaseParserCache(…);$语言=新ExpressionLanguage ($缓存);
请注意
的DoctrineBridge属性提供解析器缓存实现教义缓存库,它为各种缓存策略提供了缓存,如Apc, Filesystem和Memcached。
使用解析表达式和序列化表达式
这两个evaluate ()
而且编译()
可以处理ParsedExpression
而且SerializedParsedExpression
:
1 2 3 4 5 6
/ /……// parse()方法返回一个ParsedExpression$表达式=$语言->解析(“1 + 4”,数组());var_dump ($语言->评估($表达式));//打印5个
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\ExpressionLanguage\SerializedParsedExpression;/ /……$表达式=新SerializedParsedExpression (“1 + 4”序列化($语言->解析(“1 + 4”,数组())->getNodes ()));var_dump ($语言->评估($表达式));//打印5个
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。