fieldName = $fieldName; $this->expander = $expander; if ($expander instanceof PatternExpander) { $expander = func_get_args(); $length = count($expander); // Process all except first argument which contains field name. $this->expander = []; for ($i = 1; $i < $length; ++$i) { if (!$expander[$i] instanceof PatternExpander) { throw new \InvalidArgumentException('Has invalid expander.'); } $this->expander[] = $expander[$i]; } } } /** * @param mixed $value Value to match. * * @return boolean */ public function match($value) { if (! is_array($value) && !isset($value[$this->fieldName])) { return false; } if (is_array($this->expander)) { // Match all expanders. foreach ($this->expander as $expander) { if (! $expander->match($value[$this->fieldName])) { $this->error = "Field {$this->fieldName}: expander don't matches value. ". $expander->getError(); return false; } } // All expanders successfully matches. return true; } if ($value[$this->fieldName] !== $this->expander) { $this->error = "Field {$this->fieldName}: don't equal to {$this->expander}"; return false; } return true; } }