validateType($type); $this->type = $type; $this->value = $value; } public function validateType($type) { if (!in_array($type, static::getTypes(), true)) { throw new JSONPathException('Invalid token: ' . $type); } } public static function getTypes() { return [ static::T_INDEX, static::T_RECURSIVE, static::T_QUERY_RESULT, static::T_QUERY_MATCH, static::T_SLICE, static::T_INDEXES, ]; } /** * @param $token * @return AbstractFilter * @throws \Exception */ public function buildFilter($options) { $filterClass = 'Flow\\JSONPath\\Filters\\' . ucfirst($this->type) . 'Filter'; if (! class_exists($filterClass)) { throw new JSONPathException("No filter class exists for token [{$this->type}]"); } return new $filterClass($this, $options); } }