public function unsetProperty($name)
    {
        if (!$this->hasProperty($name)) {
            return false;
        }

        if (strstr($name, '.')) {
            try {
                $path = explode('.', $name);
                $root = $path[0];
                unset($path[0]);

                $array = ($this->hasProperty($root) ? $this->getProperty($root) : []);
                $arrayPath = '["'.implode('"]["', $path).'"]';

                eval('unset($array'.$arrayPath.');');

                $this->setProperty($root, $array);
            } catch (Exception $e) {
                return false;
            }

            return true;
        }

        if ($this->isArray()) {
            unset($this->object[$name]);
        } else {
            unset($this->object->$name);
        }

        return true;
    }