interpreter = new TreeInterpreter($fnDispatcher); $this->parser = $parser ?: new Parser(); } /** * Returns data from the provided input that matches a given JMESPath * expression. * * @param string $expression JMESPath expression to evaluate * @param mixed $data Data to search. This data should be data that * is similar to data returned from json_decode * using associative arrays rather than objects. * * @return mixed Returns the matching data or null */ public function __invoke($expression, $data) { if (!isset($this->cache[$expression])) { // Clear the AST cache when it already holds 1024 entries. if (count($this->cache) >= 1024) { $this->cache = []; } $this->cache[$expression] = $this->parser->parse($expression); } return $this->interpreter->visit($this->cache[$expression], $data); } }