public function define($key, $value)
    {

        if ($this->isProtected($key)) {

            throw new \UnexpectedValueException("Cannot re-assing protected '$key' item");
        }

        parent::set($key, $value);

        $this->protect($key);

        return $this;
    }