public function offsetUnset($name)
    {
        if ($this->offsetExists($name)) {
            $value = $this->values[$name];

            if (is_object($value)) {
                $this->shared->detach($value);
                $this->protected->detach($value);
            }

            unset($this->keys[$name], $this->values[$name], $this->frozen[$name], $this->raw[$name]);
        }
    }