$value) { $this->$key = $value; } } /** * Returns true if the given $value is valid, or set's an error and returns false otherwise. * * @abstract * * @param $value * * @return bool */ abstract public function validate($value); /** * Get first validation error. * * @return string */ public function getError() { return $this->error; } /** * Add validation error. * * @param $error */ protected function setError($error) { $this->error = $error; } /** * @param string $name */ public function setObjectName($name) { $this->objectName = $name; } /** * Throws an exception when trying to set an unexisting validator option. * * @param $name * @param $value * * @throws Exception */ public function __set($name, $value) { throw new Exception(sprintf('Incorrect option "%1$s" for validator "%2$s".', $name, get_class($this))); } /** * Adds a validation error with custom parameter support. The value of $objectName will be passed as the * first parameter. * * @param string $message Message optionally containing placeholders to substitute. * @param mixed $param Unlimited number of optional parameters to replace sequential placeholders. * * @return string */ protected function error($message) { $arguments = array_slice(func_get_args(), 1); if ($this->objectName !== null) { array_unshift($arguments, $this->objectName); } $this->setError(vsprintf($message, $arguments)); } /** * Returns string representation of a variable. * * @param mixed $value * @return string */ protected function stringify($value) { if (is_bool($value)) { return $value ? 'true' : 'false'; } elseif (is_null($value)) { return 'null'; } elseif (is_object($value)) { return get_class($value); } elseif (is_scalar($value)) { return (string)$value; } else { return gettype($value); } } }