public function value($str)
    {
        if (!is_scalar($str)) {
            throw new \InvalidArgumentException('Argument for constructor of' .__CLASS__ . ' must be a scalar!');
        }

        if (!extension_loaded('mbstring')) {
            trigger_error('You have not multibyte extension, this may create weird result!', E_USER_WARNING);
            $this->str = strtolower((string) $str);
        } else {
            $this->str = mb_strtolower((string) $str, 'UTF-8');
        }

        $this->str_out = null;

        return $this;
    }