public function setProps($props = array())
    {
        $props = $this->moveShortcuts($props);
        $type = isset($props['attribs']['type']) ? $props['attribs']['type'] : null;
        $typeChanging = $type && (!isset($this->attribs['type']) || $type !== $this->attribs['type']);
        $propsType = $typeChanging && isset($this->defaultPropsType[$type])
            ? $this->defaultPropsType[$type]
            : array();
        $this->props = $this->mergeProps(array(
            $this->props,
            $propsType,
            $props,
        ));
        if (empty($this->props['attribs']['x-moz-errormessage']) && !empty($this->props['invalidReason'])) {
            $this->props['attribs']['x-moz-errormessage'] = $this->props['invalidReason'];
        }
        $this->attribs = &$this->props['attribs'];
        $this->getId();
        if (\in_array($type, array('checkbox','radio','select'))) {
            $this->normalizeCrs();
        } elseif ($type == 'submit' && empty($props['label']) && !empty($props['attribs']['value'])) {
            $props['label'] = $props['attribs']['value'];
        }
    }