public function explode($delimiter, $limit = null)
    {
        if (!$this->isString($delimiter)) {
            throw new StringObjectException(StringObjectException::MSG_INVALID_ARG, [
                '$delimiter',
                'string'
            ]);
        }

        if ($this->isNull($limit)) {
            $arr = explode($delimiter, $this->val());
        } else {
            if (!$this->isNumber($limit)) {
                throw new StringObjectException(StringObjectException::MSG_INVALID_ARG, [
                    '$limit',
                    'integer'
                ]);
            }

            $arr = explode($delimiter, $this->val(), $limit);
        }

        if (!$arr) {
            throw new StringObjectException(StringObjectException::MSG_UNABLE_TO_EXPLODE, [$delimiter]);
        }

        return new ArrayObject($arr);
    }