支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
ExpressionLanguage组件已经提供了 compile()
方法来把表达式缓存为原生PHP。但是在内部,该组件同时缓存了解析过的表达式(parsed expressions),所以重复的表达式可以被更快速地编译/求值(evaluated)。
evaluate()
和 compile()
两个方法都要在返回value之前做些什么事情。对于 evaluate()
来说,开销更大一些。
两个方法要对表达式进行tokenize和解析。这可以被 parse()
方法完成。它返回一个 ParsedExpression
。现在, compile()
只返回这个对象的字符串变体。evaluate()
方法需要遍历 "节点" (nodes。即,一个存储在 ParsedExpression
中的表达式片断),然后迅即对求值。
为了节省时间, the ExpressionLanguage
缓存了 ParsedExpression
以便它能跳过对重复的表达式的tokenize和解析的步骤。缓存是由 ParserCacheInterface
实例完成的 (默认时,它使用了一个 ArrayParserCache
)。你可以通过创建一个自定义的 ParserCache
来定制这一步,然后使用构造器注入把它注入到对象中:
1 2 3 4 5 | use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Acme\ExpressionLanguage\ParserCache\MyDatabaseParserCache;
$cache = new MyDatabaseParserCache(...);
$language = new ExpressionLanguage($cache); |
DoctrineBridge 使用 doctrine缓存库 进而实现了一个Parser Cache的实现,令你能够使用全部类型的缓存策略进行缓存。比如Apc, Filesystem以及Memcached等。
evaluate()
和 compile()
方法都可以处理 ParsedExpression
实例 和 SerializedParsedExpression
实例:
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。